2011-08-10 52 views
3

我需要建立一个动态的形式将inputText字段,我使用这个代码:如何动态地构建一个回豆编辑表单

<h:form> 
    <c:forEach items="#{userBean.getFieldList()}" var="field"> 
     <h:inputText value="#{userBean.getFieldValue(field.name)}" />      
    </c:forEach> 
    <h:commandButton value="Login" action="#{userBean.loginAction}" />   
</h:form> 

的VAR字段是元数据,并没有自己的字段值,但只有他们的属性。所以我用

#{userBean.getFieldValue(field.name)} 

得到bean字段值。 如果仅用于查看页面,上面的代码运行良好。 但不在表单提交,因为它不可能通过字段名称setFieldvalue。 有没有办法来覆盖问题?有没有一种通用的方法来动态构建一个后台bean编辑表单?

回答

2

将它绑定到Map<String, Object>属性并使用大括号[]作为动态映射关键字。

E.g.

private List<Field> fields; // +getter (no setter required) 
private Map<String, Object> values; // +getter (no setter required) 

public UserBean() { 
    fields = populateItSomehow(); 
    values = new HashMap<String, Object>(); 
} 

// ... 

<h:form> 
    <c:forEach items="#{userBean.fields}" var="field"> 
     <h:inputText value="#{userBean.values[field.name]}" />      
    </c:forEach> 
    <h:commandButton value="Login" action="#{userBean.loginAction}" />   
</h:form> 

字段名称成为地图键和字段值成为映射值。

+0

我在发布代码时发生了错误,所以我更新了这个问题。 – Brutos

+0

我更新了答案。 – BalusC

+0

它工作正常,非常感谢balusC。 – Brutos