基于布尔值有条件地切换组件属性的值
Posted
技术标签:
【中文标题】基于布尔值有条件地切换组件属性的值【英文标题】:Conditionally toggle value of component attribute based on a boolean 【发布时间】:2012-05-01 10:00:47 【问题描述】:我有一个 JSF 数据表,其中一列包含艺术家列表以及一个 commandLink,我希望在您单击链接时显示或隐藏特定艺术家制作的专辑。
我刚刚开始了解 JSF,我想知道在单击链接时,让 commandLink 的值在“显示专辑”和“隐藏专辑”之间切换的最佳做法是什么?不使用javascript是否可以做到这一点?
谢谢
【问题讨论】:
【参考方案1】:您可以在 EL 中使用条件运算符 ?:
来实现这一点。如果布尔表达式的计算结果为true
,则执行第一条语句,否则执行第二条语句。
<h:commandLink ... value="#bean.showAlbums ? 'Show' : 'Hide' Albums" />
您甚至可以使用与显示/隐藏实际专辑相同的条件。
【讨论】:
当我尝试这个时,它会更新数据表中的所有链接,而不仅仅是我点击的那个。这个想法是,当您单击一个链接时,只有该链接的值才会更改为“隐藏专辑”,并且应该只显示该特定艺术家的专辑。 那么你应该让条件依赖于当前行,而不是父bean,否则它显然会应用于所有行。例如。value="#artist.showAlbums ? 'Show' : 'Hide' Albums"
我已经实现了,它运行良好。非常感谢您花时间回答我的问题!
@BalusC:你知道如何访问引号内的locals(本地配置)吗?很遗憾,value="#controller.myBoolVal ? 'msg.yes' : 'msg.no'"
不起作用。
@John:嗯?你是说资源包?如果这些值不代表字符串而是 EL 变量,只需删除引号即可。【参考方案2】:
你的链接
<a4j:commandLink value="#myBean.value" action="#myBean.toggleValue" reRender="myLink" id="myLink"/>
你的豆子
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
@ManagedBean(name="myBean")
@ViewScoped
public class MyBean
boolean show = true;
public void toggleValue()
this.show = !this.show;
public String getValue()
return this.show ? "Show" : "Hide";
【讨论】:
感谢您的回答!当我尝试这样做时,它会更新数据表中的所有链接,而不仅仅是我单击的链接。这个想法是,当您单击一个链接时,只有该链接的值才会更改为“隐藏专辑”,并且应该只显示该特定艺术家的专辑。以上是关于基于布尔值有条件地切换组件属性的值的主要内容,如果未能解决你的问题,请参考以下文章