【发布时间】:2013-01-19 11:34:30
【问题描述】:
如何在 JSF 中创建切换按钮?
基本上,我需要两个按钮“输入”和“输出”。它们本质上调用了同一个托管 bean,但是由于每次单击都应该禁用一个,启用另一个,反之亦然。如何才能做到这一点?我应该使用 ajax 功能吗?
【问题讨论】:
标签: jsf jsf-2 toggle commandbutton
如何在 JSF 中创建切换按钮?
基本上,我需要两个按钮“输入”和“输出”。它们本质上调用了同一个托管 bean,但是由于每次单击都应该禁用一个,启用另一个,反之亦然。如何才能做到这一点?我应该使用 ajax 功能吗?
【问题讨论】:
标签: jsf jsf-2 toggle commandbutton
只需有一个 boolean 属性,您可以在操作方法中反转该属性,并在两个按钮的 disabled 属性中完全使用该属性,反转。
启动示例:
@ManagedBean
@ViewScoped
public class Bean {
private boolean enabled;
public void toggle() {
enabled = !enabled;
}
public boolean isEnabled() {
return enabled;
}
}
有
<h:form>
<h:commandButton value="Enable" action="#{bean.toggle}" disabled="#{bean.enabled}" />
<h:commandButton value="Disable" action="#{bean.toggle}" disabled="#{not bean.enabled}" />
</h:form>
Ajax 在技术上不是必需的。随意在两个按钮上添加<f:ajax> 以改善用户体验。
@ViewScoped bean 反过来是非常必要的。 @RequestScoped 将在请求结束时被丢弃并在下一个请求中重新创建,从而导致 boolean 重新初始化为默认值,因此在第二次单击后似乎无法工作,因为 JSF 将作为防止篡改/黑客攻击的一部分在实际调用操作之前,请求还会检查disabled(和rendered)属性。
【讨论】:
提出一个新问题并将SSCCE 风格的代码放入其中。