【问题标题】:Use "contains" statement in rendered attribute on "h:outputlink" JSF在“h:outputlink”JSF 的渲染属性中使用“contains”语句
【发布时间】:2014-02-27 00:00:58
【问题描述】:

我的 back-bean 中有一个数组,其中包含一些值,例如 '1'-'2'-'3'-'4'-'5' 在 JSF 中,我想在 h:outputlink 中使用渲染属性来根据每行的一些值来显示或不可见数据表行上的链接 例如,我可以在每一行中都有唯一的 id,如 rowvar.accountType.entity.id,它返回一个唯一的 id,然后我想检查我在后 bean 中填充它的数组是否包含这个 id,然后渲染的值应该是 true,并且行应该可见。像这样 <h:outputLink rendered="#{Arrays.asList(acceptedIds).contains(rowvar.accountType.entity.id) }"

但当然是不正确的!

你能帮我看看如何处理吗?

【问题讨论】:

  • 您使用 JSF 实用程序库 OmniFaces 吗?它有一个 of:contains() 函数用于此目的。
  • 对渲染属性有效吗?

标签: jsf rendered-attribute


【解决方案1】:

我通过使用这些语句解决了我的问题

<c:set var="theString" value="#{MyBean.payByShetabAccount}"/>
<c:set var="theString2" value="#{rowvar.accountType.entity.name}" />

<h:outputLink styleClass="fancybox-iframe  tipsy" 
        rendered="#{fn:contains(theString, theString2) || theString == '*'}"                                        
        title="#{AccountBeanbeanMessages['property_settleToAccount_caption']}"
        value="hello.jsf">
        <h:graphicImage url="img/small-icons/list-operations/left.png" styleClass="standardTable_Icon"></h:graphicImage>
        </h:outputLink>

【讨论】:

    【解决方案2】:

    你是对的,它不会这样工作。

    一种选择是重构您的代码,使其使用提供contains() 方法的集合/列表,而不是使用数组。这样一来,整个故事就变得简单多了。

    另一种解决方案是在您的 bean 上实现一个方法,该方法接受一个数组作为参数并返回数组值的 Collection 实例。

    您还可以实现自定义 EL 函数。查看this answer 了解如何操作。

    【讨论】:

    • 实际上我尝试了与该帖子相同的自定义 EL,但它不起作用。我不知道是不是问题:(
    【解决方案3】:

    我将创建一个接收数组和 id 并返回布尔值的方法。那么 EL 表达式可能类似于“#{existsInArray(array, id)}”

    【讨论】:

    • 我也试过了,我不能将参数从 JSF 传递给 mybacjbean,我的意思是我不能传递 'rowvar.accountType.entity.id'
    • 您使用的是较旧的 JSF 版本吗?从 JSF 2+ 开始,这应该是可能的。我们需要查看您的代码,否则我们可以一直猜测。
    猜你喜欢
    • 2011-09-09
    • 1970-01-01
    • 2013-01-27
    • 2011-06-10
    • 1970-01-01
    • 2012-09-01
    • 2015-07-22
    • 1970-01-01
    • 2011-08-26
    相关资源
    最近更新 更多