0

我在托管 bean 中有一个成员变量,该成员变量通过 getter 和 setter 绑定到 XHTML 中的组件。如果我在函数调用中设置成员变量,当这个成员变量的getter被触发时,这个成员变量仍然会保持旧值。我可以知道如何更新这个成员变量,以便组件可以获得最新的更新值吗?

管理 bean:

@ManagedBean(name = "myBean")
@SessionScoped    
public class MyBean {
  public boolean show = false;

  /** getter and setter **/

  public void theFunc() {
     this.show = true;
  }
}

XHTML 代码

<h:panelGroup id="Panel_1" rendered="#{myBean.show == true}">
   ...
   Some rubbish here
   ...
</h:panelGroup>

<h:panelGroup id="Panel_2">
   <h:commandLink action="#{myBean.doFunc}">
      <f:ajax event="action" render="Panel_1"/>
      <h:outputText value="XX" />
   </h:commandLink>
</h:panelGroup>

在此示例中,show即使theFunc()已设置为 true,变量也显示为 false。

2012 年 10 月 6 日更新 我已删除 commandButton 并替换为 commandLink,我认为它在使用方面应该没问题。

4

2 回答 2

1

如果您希望调用它,请更改您的方法返回类型名称。

改变这个

  public void theFunc() {
     this.show = true;
  }

对此

  public String doFunc() {
     this.show = true;
     return null;
  }

否则这个动作不能起作用。

   <h:commandLink action="#{myBean.doFunc}">

然后像这样更新面板的父级

<h:panelGroup id="parentPanelGroupId">

    <h:panelGroup id="Panel_1" rendered="#{myBean.show}">
        ...
        Some rubbish here
        ...
    </h:panelGroup>

</h:panelGroup>

<h:panelGroup id="Panel_2">
   <h:commandLink action="#{myBean.doFunc}">
      <f:ajax render="parentPanelGroupId"/>
      <h:outputText value="SHOW/HIDE PANEL 1" />
   </h:commandLink>
</h:panelGroup>

笔记:

采用

渲染=“#{myBean.show}”

代替

渲染=“#{myBean.show == true}”

于 2012-10-04T20:15:11.383 回答
1

试试这个方法:

<h:panelGroup id="toUpdate">

    <h:panelGroup id="Panel_1" rendered="#{myBean.show}">
        ...
    </h:panelGroup>

</h:panelGroup>

<h:commandButton action="#{theBean.doCalculation}">
    <f:ajax render="toUpdate" />
</h:commandButton>

有2点需要注意:

  1. 您需要将始终呈现的<h:panelGroup id="Panel_1">另一个或其他东西包裹起来。<h:panelGroup>否则,如果show变量最初是false,则 ajax 更新可能无法工作,因为 JSF 渲染器id="Panel_1"在您使用<f:ajax render="Panel_1" />.
  2. rendered="#{myBean.show}"足够好:P。由于show是一个布尔变量,因此您不需要rendered="#{myBean.show == true}".
于 2012-10-05T07:04:21.740 回答