我需要实现一个将列表传递给其支持bean的ice:commandButton
。我不是在portlet范围内,而是在标记范围内。
我知道当我从actionListener中检索f:attribute
时,我得到一个必须要转换的对象。
我想知道我是否可以将f:属性映射到List<MyClass>
,其中列表的实际实例实际上 ArrayList
和MyClass
是可序列化的。
类似的东西:
MyTag.xhtml
<ice:commandButton actionListener="#{TagBean.doPrintItems}">
<f:attribute name="collection" value="#{items}" />
</ice:commandButton>
//[other things]
MyPortlet.jspx
<my:printPopup items="#{BackingBean.itemsToPrint}" />
BackingBean.java
class BackingBean {
private List<MyClass> itemsToPrint;
//getter and setter of course
}
TagBean.java
class TagBean {
private List<MyClass> collection;
//getter and setter of course
public void doPrint(ActionEvent e) {
collection = (List<MyClass>) e.getComponent().getAttributes().get("collection");
}
你认为这是可行的吗?感谢
答案 0 :(得分:0)
<f:attribute>
使您可以添加自定义组件属性。它们将存储在服务器端的组件树状态中。所以它可以是你想要的任何Java对象类型。方法UIComponent#getAttributes()
也暗示了更少或更多;它会返回Map<String, Object>
,而不是Map<String, String>
。我相信您的疑问是基于HTTP请求参数只能是字符串的事实。但不应将组件属性与HTTP请求参数混淆。