我在开发中使用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字仍然存在。
有任何线索吗?
答案 0 :(得分:2)
我认为render="Panel_Y"
是你的问题:你正试图渲染一些未在页面上呈现的东西。尝试渲染父/容器(即包含两个面板的h:表单),这将重新评估第二个面板中的rendered="#{magicBean.show_X == false}"
。
我还建议将后者更改为rendered="#{magicBean.show_Y}"
以便于阅读......