【问题标题】:How to refresh JSF h:panelGroup?如何刷新 JSF h:panelGroup?
【发布时间】:2012-10-07 08:08:38
【问题描述】:

我在开发中使用 JSF 2.0、战斧和一些 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字留在原处。

这有什么线索吗?

【问题讨论】:

标签: java jsf-2 facelets


【解决方案1】:

我认为render="Panel_Y" 是您的问题:您正在尝试渲染最初未在页面上渲染的内容。尝试渲染父/容器(即包含两个面板的 h:form),它将重新评估第二个面板中的 rendered="#{magicBean.show_X == false}"。 我还可以建议将后者更改为 rendered="#{magicBean.show_Y}" 以提高可读性...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-18
    • 2012-08-13
    • 2013-08-23
    • 2014-06-21
    • 1970-01-01
    • 2011-11-02
    • 2015-10-01
    • 2015-10-30
    相关资源
    最近更新 更多