我尝试学习 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
并向用户显示“解析器错误!” 信息
即,为了简单h:inputText
,没有任何验证器和转换器,我从服务器端收到有关解析h:inputText
值的错误消息。
一段时间后,我想出了我可以创建自己的转换器,它不会修改对象,只是String
通过他自己。
我确实将转换器的实现添加到了<h:inputText/>
这项工作中。
问题:
在书籍和其他教程中的所有示例中,没有人使用自定义转换器来<h:inputText/>
表示inputText
支持String
bean 的值。
如果没有自定义转换器,为什么所有这些教程和示例都不适合我?我的错在哪里?
源代码:没有转换器的
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>
用户Bean.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>