0

这是我的问题的简化版本。

<h:form id="form1">
  <a4j:commandButton value="Ok" reRender="panel_1"/>

  <a4j:outputPanel id="panel_1" layout="block" style="height:100px;border:solid 1px;">
    Content here should be reRendered

    <a4j:outputPanel id="panel_2" layout="block" style="height:50px;border:solid green;color:green;">
      Content here should not be reRendered  
    </a4j:outputPanel>

  </a4j:outputPanel>
</h:form>

当用户单击 时<a4j:commandButton>,应重新渲染第一个<a4j:outputPanel>(panel_1)。但是第二个里面的内容<a4j:outputPanel>不应该重新渲染。
这可能吗?(至少通过将 更改<a4j:outputPanel>为另一个组件。)

4

2 回答 2

0

您可以使用MyFaces改进 Makhiel 解决方案,它允许您定义子表单来包装一些内容以进行部分验证和模型更新。

MyFaces 还允许您通过属性附加<t:commandButton>到特定对象。<t:subform>actionFor=""

您需要包含 tomahawk 库才能使用它的标签:

<%@ taglib prefix="t" uri="http://myfaces.apache.org/tomahawk"%>

然后可以通过这种方式重写 Makhiel 的代码(我将按钮移动到内部<a4j:outputPanel>,以便将其放在<t:subform>标签内。

<h:form id="form1">
    <a4j:outputPanel id="panel_1" layout="block" style="height:100px;border:solid 1px;">
        <t:subform id="FirstPanelForm">
            <t:commandButton value="Ok" reRender="panel_1_a" actionFor="FirstPanelForm"/>
            <a4j:outputPanel id="panel_1_a">
                Content here should be reRendered
            </a4j:outputPanel>
        </t:subform>
        <a4j:outputPanel id="panel_2" layout="block" style="height:50px;border:solid green;color:green;">
            Content here should not be reRendered  
        </a4j:outputPanel>
    </a4j:outputPanel>
</h:form>

我不知道这是否是您正在寻求的行为。如果没有,请坚持这个subform想法并尝试在您的代码中使用它。

于 2012-11-28T09:59:04.623 回答
0

将要在另一个面板中重新呈现的内容包装起来怎么样?像这样:

<h:form id="form1">
  <a4j:commandButton value="Ok" reRender="panel_1_a"/>
  <a4j:outputPanel id="panel_1" layout="block" style="height:100px;border:solid 1px;">

    <a4j:outputPanel id="panel_1_a">
      Content here should be reRendered
    </arj:outputPanel>

    <a4j:outputPanel id="panel_2" layout="block" style="height:50px;border:solid green;color:green;">
      Content here should not be reRendered  
    </a4j:outputPanel>

或者,您可以搬到panel_2其他地方。

于 2012-11-22T10:30:37.113 回答