如何在JSF中创建切换按钮?
基本上,我需要两个按钮"输入"one_answers"输出"。它们本质上调用相同的托管bean,但每次单击都会禁用一个,启用另一个,反之亦然。如何做到这一点?我应该使用ajax功能吗?
只需在操作方法中反转一个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
)属性,以防被篡改/黑客攻击的请求。
另请参阅:
- 如何选择正确的bean作用域
- commandButton/commandLink/ajax-action/listaner方法未调用或输入值未更新(第5点)