为什么我的动作监听器没有被调用

时间:2012-11-07 07:35:46

标签: java jsf-2 primefaces

我有一个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"检查并将所有验证放入我的动作侦听器方法中?

1 个答案:

答案 0 :(得分: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;
       }
   }
来自import org.apache.commons.lang3.StringUtils的

isBlank;

相依:

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