0

我在f:ajax开发中使用 JSF 2.0、战斧和一些东西。我正在尝试为我的 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字留在原处。

对此有任何线索吗?

4

1 回答 1

2

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

于 2012-10-07T08:20:43.683 回答