Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 将EL表达式传递给复合组件_Jsf 2_El_Custom Component_Composite Component - Fatal编程技术网

Jsf 2 将EL表达式传递给复合组件

Jsf 2 将EL表达式传递给复合组件,jsf-2,el,custom-component,composite-component,Jsf 2,El,Custom Component,Composite Component,我们仍然处于JSF1.2到2.0的迁移场景中,现在我们面临着一个与EL表达式中使用的c:set或ui:param变量相关的问题 以下是事实。有一个按钮作为复合组件: ... ... 现在我们尝试在工具栏中使用这个按钮组件。按钮的禁用状态在工具栏内使用c:set或ui:param确定(我们已经尝试了两种方法) 或 #{IsButtonneEnabled} 这就是我们的问题。如果我们在工具栏中简单地打印出“IsButtonneEnabled”的值,它总是正确的。因此,支持bean是可以的。但

我们仍然处于JSF1.2到2.0的迁移场景中,现在我们面临着一个与EL表达式中使用的c:set或ui:param变量相关的问题

以下是事实。有一个按钮作为复合组件:


...
...
现在我们尝试在工具栏中使用这个按钮组件。按钮的禁用状态在工具栏内使用c:set或ui:param确定(我们已经尝试了两种方法)


或
#{IsButtonneEnabled}
这就是我们的问题。如果我们在工具栏中简单地打印出“IsButtonneEnabled”的值,它总是正确的。因此,支持bean是可以的。但是,当我们试图将此值传递给复合组件时,它不起作用。“Disabled”总是被计算为false

当然,我们可以直接传递方法表达式(#{!backingBean.isButtonEnabled}),这样就可以了。但是在我们的场景中,enabled标志的确定要复杂得多,我只是尽量使示例尽可能简单。另外,该标志用于工具栏中的多个按钮,因此我们希望通过使用c:set或ui:param保持代码的可维护性。这是错误的处理方式吗?你推荐什么

提前谢谢


SlimShady

您的问题是JSF中的值绑定方式。首选的方法是通过调用
getValueExpression(“attributeName”)
来检索填充属性的EL表达式。然后这个EL表达式可以用来获取或设置支持bean中的值。由于您没有将
{!isButtonEnabled}
传递给
{cc.attrs.disabled}
ice:commandButton
绑定失败

我为Primefaces的
p:selectOneMenu
组件解决了这个问题,编写了一个包装
UIComponent
,它定义了一个属性
wrappedValue
,并将该属性传递给
p:selectOneMenu
。然后,在该属性的getter和setter中,我使用
getValueExpression
重设该属性的实际EL表达式

<composite:interface componentType="de.gw2tome.component.valuewrapper">
    <composite:attribute name="value" type="de.gw2tome.models.Rarity"
        required="true" />
</composite:interface>

<composite:implementation>
    <p:selectOneMenu value="#{cc.wrappedValue}"/>
    ...
</composite:implementation>
该组件现在可以通过以下方式使用:

<g:rarityChooser value="#{itemSearchBean.minRarity}" />

<g:rarityChooser value="#{itemSearchBean.minRarity}" />