2010-09-20 71 views
0

我有一个编辑屏幕,显示一系列实体的可编辑属性(字段)。这个字段列表是动态的,因为任何字段都可以在没有任何代码更改的情况下从列表中添加/删除。我有一个这样的模型。使用JSF绑定动态属性

public class Property{ 

private String displayName; 
private String value; 
private int displayOrder; 
//other props,getters,setters etc.. 
} 

我的backingBean具有这些属性的地图(出于其他一些原因,我们选择map作为数据结构)。

public class BackingBean{ 

private Map<String,Property> editableProps; 
//other props,getters,setters etc.. 
} 

问题在于迭代此映射并为每个条目生成一个文本框。由于A4J:重复(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的属性不会自动发生。如果我尝试使用h:inputText之内c:forEach,组件不会呈现(猜测jstl var不适用于jsf)。 有没有JSF的方式做这一切(使用散列图?所以一个文本框是为地图中的每个条目生成的,并且它的任何改变都被绑定到底层的java bean属性。

+0

9个月后,我有完全一样的问题。你有没有解决它? – 2011-06-28 07:27:44

+0

不,只是以非jsf方式实现它。 – chedine 2011-07-21 09:08:17

回答

0

提出的代码无法在当前版本的JSF中使用。 但是,现在实现这一点的更简单的方法是让你的bean本身成为一张地图。

@Component("prop") 
public class PropertyBean extends HashMap<String, Property>{ 
    public PropertyBean() { 
     this.put("prop1", property1); 
     this.put("prop2", property2); 
    } 
} 

而在小面

<h:outputText value="#{prop.prop1.displayName}" /> 
<h:outputText value="#{prop.prop1.value}" />