【发布时间】:2011-04-14 16:45:31
【问题描述】:
我有一个显示实体的一系列可编辑属性(字段)的编辑屏幕。并且这个字段列表是动态的,从某种意义上说,任何字段都可以从列表中添加/删除,而无需更改任何代码。我有一个类似的模型。
public class Property{
private String displayName;
private String value;
private int displayOrder;
//other props,getters,setters etc..
}
我的 backingBean 有这些属性的映射(出于某些其他原因,我们选择映射作为数据结构)。
public class BackingBean{
private Map<String,Property> editableProps;
//other props,getters,setters etc..
}
问题在于迭代此地图并为每个条目生成一个文本框。由于 a4j:repeat(richfaces) 不会遍历地图,所以我决定使用 JSTL,代码片段看起来像这样,
<c:forEach items="${mybean.editableProps}"
var="item" >
<tr>
<td>
<c:out value="${item.value.displayName}"/>
</td>
<td>
<input type="text" value="${item.value.value}" />
</td>
</tr>
</c:forEach>
除了将 ui 字段绑定到 bean 的属性不会自动发生之外,这将正常工作。如果我尝试在 c:forEach 中使用 h:inputText,则组件不会被渲染。(猜想 jstl var 不适用于 jsf)。 有没有一种 JSF 方式来做这一切(使用 hashmap)?以便为地图中的每个条目生成一个文本框,并且对它的任何更改都会绑定到底层 java bean 属性。?
【问题讨论】:
-
9 个月后,我遇到了完全相同的问题。你解决了吗?
-
没有,只是用非jsf的方式实现而已。