如果没有自定义转换器,JSF不会将InputText值转换为支持bean的字符串变量



我尝试学习JSF并面临问题。
我使用了Servlet 2.5、JDK 1.6和JSF 2.0.6。

我有一个简单的JSF页面,它有一个<h:inputText/>标记用于与用户交互


我希望用户填写h:inputText,然后点击h:commandButton,在服务器端,我将获得具有更新值的备份bean。

但是在我的情况下,JSF的生命周期在process validations上中断,移动到render response并向用户显示"解析器错误!"消息

。对于没有任何验证器和转换器的简单h:inputText,我从服务器端收到关于解析h:inputText值的错误消息。


一段时间后,我发现我可以创建自己的转换器,它不会修改对象,只是通过自己传递String

我确实把我的转换器的实现添加到<h:inputText/>和这个工作中。

问题:
在书籍和其他教程中的所有示例中,如果inputText表示支持bean的String值,则没有人使用<h:inputText/>的自定义转换器。
为什么所有这些教程和例子不为我工作没有自定义转换器?我错在哪里?

源代码:
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 with converter,工作正常

<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>

问题的原因在目前发布的代码中是不可见的,但关键症状"它失败的消息来自一个迄今为止身份不明的转换器,而它成功的显式转换器"建议你在同一项目的其他地方一个@FacesConverter(forClass=String.class),它会自动运行在每个单独的String属性上,没有另一个显式指定的转换器。

相关内容

  • 没有找到相关文章

最新更新