0

我尝试学习 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支持Stringbean 的值。
如果没有自定义转换器,为什么所有这些教程和示例都不适合我?我的错在哪里?

源代码:没有转换器的
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>
4

1 回答 1

2

到目前为止,问题的原因在发布的代码中不可见,但关键症状“它失败并显示来自迄今为止身份不明的转换器的消息,而它成功使用显式转换器”表明您在同一个项目中的其他地方a@FacesConverter(forClass=String.class)它将在每个String没有明确指定另一个转换器的单个属性上自动运行。

于 2013-04-02T14:52:09.540 回答