Java 使用JSF绑定动态属性

Java 使用JSF绑定动态属性,java,jsf,Java,Jsf,我有一个编辑屏幕,显示实体的一系列可编辑属性字段。这个字段列表是动态的,在这个意义上,任何字段都可以在列表中添加/删除,而无需任何代码更改。我有一个这样的模型 public class Property{ private String displayName; private String value; private int displayOrder; //other props,getters,setters etc.. } 我的backingBean有一个这些属性的映射。出于其

我有一个编辑屏幕,显示实体的一系列可编辑属性字段。这个字段列表是动态的,在这个意义上,任何字段都可以在列表中添加/删除,而无需任何代码更改。我有一个这样的模型

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:repeatrichfaces不会在映射上迭代,所以我决定使用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,组件不会被呈现。
有没有一种JSF方法可以使用hashmap来完成所有这些工作?这样,映射中的每个条目都会生成一个文本框,对它的任何更改都会绑定到底层的JavaBean属性中。

建议的代码在当前的JSF版本中工作。 但是,现在实现这一点的一个更简单的方法是将您的bean本身制作成地图

@组件属性 公共类PropertyBean扩展HashMap{ 公共财产{ 这是1.putprop1,不动产1; 这是第2条,不动产第2条; } } 在脸上


9个月后,我遇到了完全相同的问题。你解决过它吗?没有,只是用非jsf的方式实现了它。