如何刷新JSF h:panelGroup?

时间:2012-10-07 08:08:39

标签: java jsf-2 facelets

我在开发中使用JSF 2.0,tomahawk和一些f:ajax的东西。我正在尝试为我的JSF应用程序添加一些神奇的单词。当您单击该单词时,它将更改为另一个单词,再次单击它将再次更改它。为了更清楚,这是一个场景。显示XX的原始单词,当点击XX时,XX将更改为YY。单击YY时,将更改回XX。你觉得这很神奇吗? :P

这就是我的成就。我创建了2 h:panelGroup。一个将包含一个XX字,另一个将包含YY字,如下所示:

<h:panelGroup id="Panel_X">
   <h:outputText value="XX" />
</h:panelGroup>

<h:panelGroup id="Panel_Y">
   <h:outputText value="YY" />
</h:panelGroup>

为了使其可点击,我使用commandLink。从上面的代码修改并成为:

<h:panelGroup id="Panel_X" rendered="#{magicBean.show_X == true}">
   <h:commandLink action="#{myBean.doFunc}">
      <f:ajax event="action" render="Panel_Y"/>
      <h:outputText value="XX" />
   </h:commandLink>
</h:panelGroup>

<h:panelGroup id="Panel_Y" rendered="#{magicBean.show_X == false}">
   <h:commandLink action="#{myBean.doFunc}">
      <f:ajax event="action" render="Panel_X"/>
      <h:outputText value="YY" />
   </h:commandLink>
</h:panelGroup>

这是支持bean:

@ManagedBean(name = "magicBean")
@SessionScoped
public class MagicWordBean {

   public boolean show_X = true;

   /** getter and setter of show_X **/

   public String doFunc() {

      showX = !showX;
      return "";
   }
}

我不确定我是否正确地做了但有一件事我确信它不起作用。最初加载页面时,它会显示XX字。点击XX字时,YY字不显示,XX字仍然存在。

有任何线索吗?

1 个答案:

答案 0 :(得分:2)

我认为render="Panel_Y"是你的问题:你正试图渲染一些未在页面上呈现的东西。尝试渲染父/容器(即包含两个面板的h:表单),这将重新评估第二个面板中的rendered="#{magicBean.show_X == false}"。 我还建议将后者更改为rendered="#{magicBean.show_Y}"以便于阅读......