基于布尔值有条件地切换组件属性的值

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";
  

【讨论】:

感谢您的回答!当我尝试这样做时,它会更新数据表中的所有链接,而不仅仅是我单击的链接。这个想法是,当您单击一个链接时,只有该链接的值才会更改为“隐藏专辑”,并且应该只显示该特定艺术家的专辑。

以上是关于基于布尔值有条件地切换组件属性的值的主要内容,如果未能解决你的问题,请参考以下文章

如何根据条件语句添加 React 组件,基于可变计数器评估布尔值

Python中布尔类型的值都有哪些呢?

SwiftUI - 如何切换核心数据中的所有布尔值

有条件地启用 Storybook 控件

目标 C:按下按钮后切换属性的布尔值的问题

无法将“查询”类型的值转换为预期的条件类型“布尔”