无法在有条件呈现 rich:panel 时提交 h:form

Cannot submit h:form on conditionally rendered rich:panel

我在提交有条件呈现的表单内容时遇到问题 rich:panel。我在表单中有一个 commandButton,其操作应该在我的支持 bean 上执行一个方法,但该方法从未被调用,而是重新呈现整个页面。我在类似的问题中读到该问题与视图状态有关,但我尝试遵循人们给出的答案,但没有运气。

这是我的主要 xhtml 页面的一个片段,用于将控制面板渲染的布尔值设置为 'true'(它在数据网格中):

<a4j:commandLink execute="@this" value="#{tableData.itemNumber}" render="edit editRowPanel editForm" title="View/Edit Record Detail"
                                action="#{navigate.setShowEdit(true)}" oncomplete="RichFaces.$('pleaseWaitView:searchWaitPanel').hide()" >
   <f:setPropertyActionListener target="#{context.currentItem}" value="#{tableData}" />
</a4j:commandLink>

以上代码正在按应有的方式呈现面板。

这是显示面板的主 xhtml 页面中的代码:

<h:panelGroup id="edit">
   <rich:panel id="editRowPanel" rendered="#{navigate.isShowEdit()}" style="padding: 10px" >
      <f:facet name="header">
         <h:outputText value="Edit Row"/>
      </f:facet>
      <ui:include src="detail-page.xhtml" />
   </rich:panel>
</h:panelGroup>

这是详细信息表单中的提交按钮代码-page.xhtml:

<h:commandButton styleClass="button" value="#{bundle.SaveChangesButton}" action="#{pplSuspenseBean.performRecordSave}" />

如果我在我的 editRowPanel 上设置 "rendered="true"" 一切正常,只有在基于条件渲染时它才不起作用。非常感谢任何解决此问题的建议,谢谢!

我决定只使用 CSS "display" 属性 来显示和隐藏我的面板,因为在这种情况下安全性不是很重要(只是一个输入仅当用户是特定角色时才允许编辑的表单)。

我创建了一个 CSS class 来隐藏面板:

.nodisplay {
    display: none;
}

然后我将 h:panelGroup 上的 styleClass 设置为 "nodisplay":

<h:panelGroup id="edit" styleClass="nodisplay">
   <rich:panel id="editRowPanel" style="padding: 10px" >
      <f:facet name="header">
         <h:outputText value="Edit Row"/>
      </f:facet>
      <ui:include src="detail-page.xhtml" />
   </rich:panel>
</h:panelGroup>

并更改了我的 a4j:commandLink 以删除此样式 class onClick:

<a4j:commandLink value="#{tableData.itemNumber}" title="View/Edit Record Detail" 
   render="editRowPanel" oncomplete="RichFaces.$('pleaseWaitView:searchWaitPanel').hide()" 
   onclick="$(edit).removeClass('nodisplay');>
   <f:setPropertyActionListener target="#{context.currentItem}" value="#{tableData}" />
</a4j:commandLink>

我在面板中还有另一个 link 重新应用此样式 class 因此面板再次隐藏。

对于我要实现的目标,这是一个合适的解决方案。