f:setPropertyActionListener设置的属性在后续ajax请求中变为null

f:setPropertyActionListener设置的属性在后续ajax请求中变为null,ajax,jsf,jsf-2,datatable,setpropertyactionlistener,Ajax,Jsf,Jsf 2,Datatable,Setpropertyactionlistener,各位 我在JSF ajax渲染事件中遇到了一个奇怪的行为。我有一个h:datatable,其中有一个操作列,如下示例: <h:panelGroup id="myPanel"> <h:dataTable value="#{myController.data}" var="element" rendered="#{not empty myController.data}">

各位

我在JSF ajax渲染事件中遇到了一个奇怪的行为。我有一个h:datatable,其中有一个操作列,如下示例:

<h:panelGroup id="myPanel">
                                <h:dataTable value="#{myController.data}" var="element" rendered="#{not empty myController.data}">
                                <h:column>
                                    <f:facet name="header">
                                        <h:outputText value="Test"/>
                                    </f:facet>
                                    <h:outputText value="#{element.status}"/>
                                </h:column><h:column>
                                    <f:facet name="header">
                                        <h:outputText value="Action"/>
                                    </f:facet>
                                    <h:form>


                                        <h:commandButton id="generateXML" value="Generate" onclick="openModal('#confirmModal')">
                                            <f:ajax execute="@this"/>
                                            <f:setPropertyActionListener for="generateXML" target="#{myController.selectedElement}" value="#{element}" />
                                        </h:commandButton>


                                    </h:form></h:column></h:datatable></h:panelGroup>

你好@BalusC,编辑了这个问题,谢谢。@BalusC,我已经调试过了,只触发过一次。在重新加载之后,我执行了相同的操作(单击按钮Generate),并且没有调用此按钮的ajax。这就是
null
的原因。谢谢。如果我删除确认按钮的渲染,它就不会发生。让我们一起来吧。
 <h:commandButton value="Confirm" action="#{myController.create()}" onclick="$('#confirmModal').modal('hide');">
                    <f:ajax execute="@this" render=":myPanel"/>
                </h:commandButton>
@ManagedBean
@ViewScoped
public class MyController implements Serializable {

   private Object element;

   // This method is called only once. If render the panelGroup (render=":myPanel")
   public void setSelectedJob(final XmlJob selectedJob) {
     this.selectedJob = selectedJob;
   }

}