我们在这里有一个(在我们的意见中)非常简单的场景。但是我们在某些复合组件和f:属性标记上卡住了。我会尽量让代码尽可能简单。在复合组件中使用f:属性
复合组件:
<cc:interface name="button">
...
<cc:attribute
name="actionListener"
required="true"
method-signature="void f(javax.faces.event.ActionEvent)"
target="button"
shortDescription="The action listener for this button." />
...
</cc:interface>
<cc:implementation>
<ice:commandButton
...
actionListener="#{cc.attrs.actionListener}"
...>
<cc:insertChildren />
</ice:commandButton>
</cc:implementation>
...现在我们使用的组件是这样的:
<ctrl:button
...
actionListener="#{bean.method}"
...>
<f:attribute name="objectId" value="#{someObject.id}" />
</ctrl:button>
现在我们需要访问的动作监听器方法里面的 “OBJECTID” 属性。我们已经尝试过这样的事情:
public void method(ActionEvent event)
{
...
event.getComponent().getAttributes().get("objectId");
...
}
但是属性映射不包含objectId。这种方法有什么问题吗?建议如何解决这个问题?
如果有人能帮助我们,那会很好。
谢谢! SlimShady
嘿@BalusC :)我们现在正在迁移到JSF 2并面临类似的问题。我有两个问题:'f:setPropertyActionListener'确实需要target,spec TLD没有列出标签的'name'属性,所以我想你的意思是'target'? – truemmer 2012-01-27 17:08:47
@truemmer:复制粘贴错误,是的:)我修复了它。 – BalusC 2012-01-27 17:17:26
编辑第二个问题的速度太慢了.-)下一个问题是关于你的第二个解决方案:你需要在复合组件接口中有一个名为“action”的属性来提供一个'target',我是不是?为什么JSF 2规范要求操作方法没有参数?感谢您在这里回答所有这些问题:) – truemmer 2012-01-27 17:24:36