a4j: действие commandButton не запускается в rich: popupPanel Richfaces 4 JSF 2 - PullRequest
1 голос
/ 28 марта 2012

JSF код:

<rich:popupPanel modal="true" id="editPanelUser">
  <h:form>
    <h:panelGrid columns="2">
      <h:outputLabel value="first name (*)" />
      <h:inputText value="#{usersBean.currentItem.firstName}" />
    </h:panelGrid>
    <h:panelGrid>
      <a4j:commandButton value="save"
        oncomplete="if(#{facesContext.maximumSeverity==null}) #{rich:component('editPanelUser')}.hide()"
        action="#{usersBean.runAction('saveUser')}"/>
    </h:panelGrid>
  </h:form>
</rich:popupPanel>

Код бобов:

public void setRunAction(String action){
    if("saveUser".equals(action)){
        ...
    }
}

Я поставил точку останова в методе setRunAction, но он никогда не делает это здесь. Идеи?

Что странно, так это то, что код a4j: commandLink, открывающий это всплывающее окно, работает нормально и вызывает метод runAction:

<h:form>
  <rich:dataTable value="#{usersBean.dataList}" var="singleUser"
    rowClasses="row1,row2" rowKeyVar="row" id="singleUserTable"
    ajaxKeys="#{usersBean.keys}">
    <rich:column>
      <a4j:commandLink id="editlink"
        oncomplete="#{rich:component('editPanelUser')}.show();return false;">
        <f:setPropertyActionListener value="editUser"
          target="#{usersBean.runAction}" />
      </a4j:commandLink>
    </rich:column>
  </rich:dataTable>
</h:form>

Ответы [ 2 ]

0 голосов
/ 07 февраля 2014

Пожалуйста, попробуйте следующий код XHTML (также убедитесь, что у вас нет формы внутри другого элемента формы):

<rich:popupPanel modal="true" id="editPanelUser">
  <h:form id="myForm">
    <h:panelGrid columns="2">
      <h:outputLabel value="first name (*)" />
      <h:inputText value="#{usersBean.currentItem.firstName}" />
    </h:panelGrid>
    <h:panelGrid>
      <a4j:commandButton id="myBtn" value="save"
        oncomplete="if(#{facesContext.maximumSeverity==null}) #{rich:component('editPanelUser')}.hide()"
        actionListener="#{usersBean.runAction('saveUser')}"/>
    </h:panelGrid>
  </h:form>
</rich:popupPanel>

И метод в управляемом бине:

public void runAction(String action){
    if("saveUser".equals(action)){
        ...
    }
}
0 голосов
/ 29 марта 2012

измените атрибут action , как показано ниже

action="#{usersBean.setRunAction('saveUser')}"

или измените свой метод на

public void runAction(String action){}
...