1

我有一个 PrimeFaces 对话框,我在其中询问用户详细信息。我将其简化为只有一个输入文本,如下所示。

<p:dialog>
        <h:form  prependId="false">
            <p:growl showDetail="false" autoUpdate="true"  life="4000"/>
            <p:panelGrid columns="2">
                <h:outputText value="First Name" />
                <p:inputTextarea  required="true" requiredMessage="First Name is required!" />
                <p:commandButton value="Add" actionListener="#{myBean.addUser}"/>
            </p:panelGrid>
        </h:form>
</p:dialog>

我注意到当我不输入我的名字时,我的动作监听器没有被调用,我认为这是正常的,因为required="true"验证已经发生。

有没有办法配置这个,我的动作监听器仍然会被调用?还是我必须删除required="true"检查并将所有验证放在我的动作侦听器方法中?

4

2 回答 2

2

您不应该将验证逻辑放入操作方法中。

如果您需要进行比所需检查更多的验证,请为此使用自定义验证器。action 方法应该简单地添加用户并且应该依赖于 jsf 验证阶段。

有关更多信息,请参阅有关不同验证选项的此链接。

于 2012-11-07T07:52:09.753 回答
2

如果您想调用您的actionListener方法,而不管<p:inputTextarea/>删除的值如何,required="true"并在您的操作方法中进行验证:

   public void addUser() {

       if(StringUtils.isBlank(user.firstName)) {
           FacesContext.getCurrentInstance().addMessage(null,
                new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error! ",
                "First Name is required!"));
           return;
       }
   }

isBlank from import org.apache.commons.lang3.StringUtils;

无关:

在我看来,这种方法似乎是一个坏主意。

于 2012-11-07T07:54:12.413 回答