无法在有条件渲染的富:面板上提交h:表单

时间:2015-04-06 17:09:10

标签: javascript ajax forms jsf richfaces

我有一个问题是提交有条件渲染的富表格内的表单内容:面板。我在表单中有一个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}" />

如果我设置&#34;渲染=&#34;真实&#34;&#34;在我的editRowPanel上,一切正常,只有在基于条件的渲染时它才起作用。任何有关解决此问题的建议都将非常感谢,谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

.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以删除此样式类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>

我在面板中还有另一个重新应用此样式类的链接,以便再次隐藏该面板。

这是我想要实现的目标的充分解决方案。