[英]Understanding JSF converter interface
我们必须让用户输入其雇主的雇主名称和雇主标题(放入div中可以说class =“ empInfo”)。 现在用户甚至可能有多个雇主,因此我们提供了一个按钮,单击该按钮将创建另一个div(我基本上是克隆div)。
有一个表单开始页面(用jsf编写的.xhtml文件),用户可以在其中输入表单的详细信息,包括雇主信息。 然后,用户单击继续,然后他们进入复查页面(也是另一个JSF页面),用户可以在其中复查添加/删除更多的雇主信息。
我们必须让用户输入其雇主的雇主名称和雇主名称。
将值放回托管bean中。
这是棘手的地方(对我而言,鉴于我相对较少的J2ee经验,尤其是JSF经验)。
我无法从视图中获取值,无法成功将其传递到验证器类中的重写转换器方法。
<div class="XYZ">
<t:inputHidden value="#{Ctrlr.employerName}" id="eName" forceId="true" converter="jsArrayConverter"></t:inputHidden>
</div>
import javax.faces.convert.Converter;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.ConverterException;
public class FMLAConverter implements Converter{
@Override
public ArrayList<String> getAsObject(FacesContext context, UIComponent component,String ret) {
System.out.println("Inside Converter function, getting value from the view and putting it in the model");
System.out.println("I am working with "+ret +"Hmmm");
ArrayList<String> list = new ArrayList<String>();
int j=0;
int i=ret.indexOf(',');
int len = ret.length();
if (i == -1){
if(len==0){
System.out.println(list);
return list;
}
else
{
list.add(ret);
}
}
while(i>0)
{
list.add(ret.substring(j,i));
j=i+1;
if(i+1<len)
i = ret.indexOf(',', i+1);
else
i=-1;
}
System.out.println(list);
return list;
}
@Override
public String getAsString(FacesContext context, UIComponent component,
Object value) {
ArrayList <String> list = (ArrayList <String>) value;
int i=0;
StringBuilder str= new StringBuilder();
if(list==null)
{
System.out.println("It is null");
return str.append("").toString();
}
if(list.size()==0){
System.out.println("Really");
str.append("");
return str.toString();
}
for(String string:list)
{
if(i++==0)
str.append(string);
else
str.append(",").append(string);
}
System.out.println("Not bad");
return str.toString();
}
}
从chrome控制台附加屏幕截图。
在服务器上查看系统输出日志,我看到日志
我正在和Hmmmm合作
因此,我从隐藏字段返回的值是一个奇怪的空字符串“”。(除非我不完全了解JSF生命周期)
如果提交的值为null或为空,则仅表示Web浏览器未发送预期的输入值。 JSF转换器中没有任何类型的代码逻辑可以帮助解决此问题。
退后一步,并相应地修复客户端代码,以使Web浏览器实际发送预期的输入值。 根据问题的注释,事实证明您是在窗口的unload
事件期间设置值。 已经太晚了。 当请求已发送很长时间时,将触发该事件。 您需要在表单的submit
事件或提交按钮的click
事件期间设置值。 与其摆弄浏览器的JS控制台,不如将其从“控制台”选项卡切换到“网络”选项卡,然后在那儿检查HTTP请求有效负载。 请求参数是否存在?
关于具体问题,在此答案中详细说明了如何正确实现Converter
: “空转换器”的转换错误设置值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.