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
Jsf 2 在复合组件中使用f:attribute_Jsf 2_Attributes_Composite Component - Fatal编程技术网

Jsf 2 在复合组件中使用f:attribute

Jsf 2 在复合组件中使用f:attribute,jsf-2,attributes,composite-component,Jsf 2,Attributes,Composite Component,我们这里有一个非常简单的场景。但我们不知怎么地被复合组件和f:attribute标记卡住了。我会尽量使代码尽可能简单 复合组件: ... ... 。。。现在我们使用如下组件: 现在我们需要访问action listener方法中的“objectId”属性。我们已经尝试过这样的东西: 公共作废方法(ActionEvent事件) { ... event.getComponent().getAttributes().get(“objectId”); ... } 但是属性映射不包含object

我们这里有一个非常简单的场景。但我们不知怎么地被复合组件和f:attribute标记卡住了。我会尽量使代码尽可能简单

复合组件:


...
...
。。。现在我们使用如下组件:


现在我们需要访问action listener方法中的“objectId”属性。我们已经尝试过这样的东西:

公共作废方法(ActionEvent事件)
{
...
event.getComponent().getAttributes().get(“objectId”);
...
}
但是属性映射不包含objectId。这种方法有什么问题吗?解决这个问题的推荐方法是什么

如果有人能帮助我们就好了


谢谢!SlimShady

我在以下设置中成功读取了传递到cc的属性

<test:inner>
    <f:attribute name="fAttribute" value="myAttributeValue" />
</test:inner>
诀窍是在按钮的命名容器中进行搜索。因此,cc始终是一个命名容器,您可以确保最终位于内部组件中

我不确定这是否是它想要的方式,但据我所知,命名容器为它的子容器收集这些属性

Q:有人知道在Mojarra/JSF中,如果不将属性传递给按钮会被视为一个bug吗?

这是JSF 1.0/1.1的遗留问题,当时无法将对象作为附加参数传递给命令按钮/链接。由于JSF1.2,您应该为此使用

<ctrl:button action="#{bean.method}">
    <f:setPropertyActionListener target="#{bean.objectId}" value="#{someObject.id}" />
</ctrl:button>

由于EL 2.2(它是Servlet 3.0的标准部分,但对于Servlet 2.5,可在的帮助下实现),您甚至可以将整个对象作为方法参数传递:

<ctrl:button action="#{bean.method(someObject.id)}" />


Hey@BalusC:)我们目前正在迁移到JSF2,并且面临类似的问题。我有两个问题:
f:setPropertyActionListener
确实需要目标,规范TLD没有为标记列出
名称
属性,所以我猜您的意思是
目标
?@truemmer:copypaster错误,是:)我修正了。我太慢了,无法编辑第二个问题。-)下一个问题是关于你的第二个解决方案:你需要在复合组件界面中有一个名为“action”的属性,提供一个
目标
,对吗?为什么JSF2规范要求动作方法没有参数?感谢您在这里回答所有这些问题:)@truemmer:规范要求是旧时代遗留下来的,当时EL 2.2不存在。不要太严格。在EL 2.2中,调用带有参数的操作方法非常有效。只要可以基于EL语法创建有效的对象,JSF就可以调用它。我不确定这是否应该被视为黑客行为,但我喜欢您的解决方案作为迁移到JSF 2期间的临时步骤。我认为从长远来看,你应该坚持BalusC解决方案的第二种方法。我认为@BalusC解决方案中有两个缺点:你不能将
action=#{myBean.myMethod(myParameter)}
actionListener
参数一起使用,这有时很有用,并且不能像
ui:repeat
那样在循环中使用
f:setPropertyActionListener
解决方案,因为必须用唯一的bean属性绑定该值。
<ctrl:button action="#{bean.method}">
    <f:setPropertyActionListener target="#{bean.objectId}" value="#{someObject.id}" />
</ctrl:button>
<ctrl:button action="#{bean.method(someObject.id)}" />