【问题标题】:Conditionally toggle value of component attribute based on a boolean基于布尔值有条件地切换组件属性的值
【发布时间】:2012-05-01 10:00:47
【问题描述】:

我有一个 JSF 数据表,其中一列包含艺术家列表以及一个 commandLink,我希望在您单击链接时显示或隐藏特定艺术家制作的专辑。

我刚刚开始了解 JSF,我想知道在单击链接时,让 commandLink 的值在“显示专辑”和“隐藏专辑”之间切换的最佳做法是什么?不使用javascript是否可以做到这一点?

谢谢

【问题讨论】:

    标签: jsf components conditional-rendering


    【解决方案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";
      }
    }
    

    【讨论】:

    • 感谢您的回答!当我尝试这样做时,它会更新数据表中的所有链接,而不仅仅是我单击的链接。这个想法是,当您单击一个链接时,只有该链接的值才会更改为“隐藏专辑”,并且应该只显示该特定艺术家的专辑。
    猜你喜欢
    • 2017-10-07
    • 2016-11-08
    • 2018-11-23
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 2014-09-12
    相关资源
    最近更新 更多