我尝试学习JSF并遇到问题。
我确实使用了Servlet 2.5,JDK 1.6和JSF 2.0.6(来自pom文件的com.sun.faces版本)。
我有一个简单的JSF页面,其中有<h:inputText/>
标记用于与用户进行交互
我希望用户填写此h:inputText
,然后点击h:commandButton
,在服务器端,我将获得更新值的支持bean。
但在我的案例中,JSF的生命周期在process validations
上中断,请转到render
response
并向用户显示“Parser错误!”留言
即。对于没有任何验证器和转换器的简单h:inputText
我从服务器端收到有关解析h:inputText
值的错误消息。
经过一段时间后,我想出了我可以创建自己的转换器,它不会修改对象,只需将String
传递给自己。
我确实将转换器的实现添加到<h:inputText/>
并且这项工作。
问题:
在书籍和其他教程的所有示例中,如果<h:inputText/>
表示支持bean的inputText
值,则没有人使用自定义转换器String
。
为什么没有自定义转换器,所有这些教程和示例都不适用于我?我的错误在哪里?
源代码:
index.xhtml 没有转换器,不适合我:
<h:form id="UserForm">
<h:outputText value="Insert your first name:" />
<h:inputText id="userNameID" required="true" value="#{userBean.firstName}">
<f:validateLength minimum="5" maximum="25" />
</h:inputText>
<h:message showSummary="true" showDetail="false" for="userNameID" />
<h:commandButton id="submit" action="/view/validator/response?faces-redirect=true"
value="Submit" />
</h:form>
UserBean.java :
@ManagedBean(name = "userBean")
@SessionScoped
public class UserBean implements Serializable {
private String firstName;
public String getFirstName() {
return this.firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
}
MyConverter.java - 虚拟转换器
@FacesConverter(value = "myConverter")
public class MyConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
return value;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
return value.toString();
}
}
使用转换器 index.xhtml ,按预期工作:
<h:form id="UserForm">
<h:outputText value="Insert your first name:" />
<h:inputText id="userNameID" required="true" value="#{userBean.firstName}" converter="myConverter">
<f:validateLength minimum="5" maximum="25" />
</h:inputText>
<h:message showSummary="true" showDetail="false" for="userNameID" />
<h:commandButton id="submit" action="/view/validator/response?faces-redirect=true"
value="Submit" />
</h:form>
答案 0 :(得分:2)
到目前为止发布的代码中看不到问题的原因,但关键症状“它失败了,当一个显式转换器成功时,来自目前尚未识别的转换器的消息”表明你在同一个项目中的其他地方@FacesConverter(forClass=String.class)
会自动运行在每个String
属性上,而这个属性没有明确指定另一个转换器。