<a4j:commandbutton> action 属性在将 <h:message> 和 ajax 事件添加到所需的输入文本后不被调用



<a4j:outputPanel>内,我有一个禁用的输入文本,它显示来自属于类DocumentBean List<Author>Authors。我还有一个显示作者姓名的<h:selectOneMenu>。从菜单中选择"作者"时,"作者"将添加到我上面提到的List<Author>中,并出现一个新的禁用inputtext

下面是上面描述的代码:

  Autor:
          <a4j:outputPanel id="teste">
            <a4j:repeat value="#{insertDocController.docController.documentBean.authorList}" var="author">
            <br />
            <h:inputText value="#{author.name}" disabled="true" />
             <br />
             <a4j:commandButton type="submit" action="#{insertDocController.removeAutor(author.uri)}" 
             value="Remover" render="teste" />
            </a4j:repeat>
          <br />
            <h:selectOneMenu id="chooseAuthor" value="#{insertDocController.selectedAuthorUri}">
                  <f:selectItem noSelectionOption="true" itemLabel="selecione" itemValue=""/>
                  <f:selectItems value="#{insertDocController.authorValues}" var="author"
                  itemValue="#{author.uri}" itemLabel="#{author.name}"/>     
               </h:selectOneMenu> 
           <a4j:commandButton type="submit" action="#{insertDocController.addAuthor()}"
            value="Inserir" render="teste" />
            <br />
          </a4j:outputPanel>

这是来自insertDocController的addAuthor():

public void addAuthor() {   
          if(this.selectedAuthorUri != null) {
                AuthorBean a = new AuthorBean();
                a.setUri(this.selectedAuthorUri);
                a.setName(this.authMapper.searchNameByAuthorUri(this.selectedAuthorUri));
                this.docController.getDocumentBean().addAuthor(a);
              }                                                     
    }

在同一xhtml页面上有一个输入文本。当输入文本如下所示时,一切都正常工作:

Title: <h:inputText id="input"
        value="#{insertDocController.docController.documentBean.title}">
        </h:inputText> 

但是由于我将输入文本设置为必需并向其中添加了一条消息,因此停止正常工作,如下所示:

   Title: <h:inputText id="input"
            value="#{insertDocController.docController.documentBean.title}"
            required="true" requiredMessage="Campo Obrigatorio">
            <f:ajax  execute="@this input" render="message" event="blur"/>
            </h:inputText>         
            <h:message for="input" id="message" style="color:red"/>

更改标题输入文本后,当我在<h:selectedOneMenu>上选择一个作者时,它根本不会从<h:selectedOneMenu>内的<a4j:commandbutton>调用addAuthor()的操作方法。

(这是未调用的操作方法的行 - 它是从我最初给你的上面的代码中提取的):

<a4j:commandButton type="submit" action="#{insertDocController.removeAutor(author.uri)}" 
             value="Remover" render="teste" />

如果我在它再次开始工作之前按原样转动输入文本。可能有什么问题?谢谢!

您需要

指定execute属性。

删除作者

<a4j:commandButton type="submit" action="#{insertDocController.removeAutor(author.uri)}" 
         value="Remover" render="teste" execute="@this"> 
</a4j:commandButton>

对于"添加作者"按钮

<a4j:commandButton type="submit" action="#{insertDocController.addAuthor()}"
        value="Inserir" render="teste" execute="@this, chooseAuthor">
</a4j:commandButton>

希望对您有所帮助。

最新更新