如何更新托管bean的属性成员变量?

时间:2012-10-04 17:08:26

标签: java jsf jsf-2

我在托管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变量显示为false,即使theFunc()已设置为true。

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

2 个答案:

答案 0 :(得分: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}”

而不是

  

rendered =“#{myBean.show == true}”

答案 1 :(得分: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>

有两点需要注意:

  1. 您需要将<h:panelGroup id="Panel_1">包装在另一个<h:panelGroup>或其他始终呈现的文件中。否则,如果show变量最初为false,则ajax更新可能无效,因为当您使用id="Panel_1"时,JSF渲染器无法找到包含<f:ajax render="Panel_1" />的组件。
  2. rendered="#{myBean.show}"足够好了:P。由于show是布尔变量,因此您不需要rendered="#{myBean.show == true}"