【问题标题】:How to dynamically build a back bean edit form如何动态构建一个后台bean编辑表单
【发布时间】:2011-08-10 11:45:13
【问题描述】:

我需要构建一个动态放置 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字段值。 如果仅用于查看页面,则上面的代码效果很好。 但不在表单提交上,因为无法按字段名称设置字段值。 有没有办法解决这个问题?有没有一种通用的方法来动态构建一个 back bean 编辑表单?

【问题讨论】:

    标签: jsf jsf-2 dynamic-forms


    【解决方案1】:

    将其绑定到Map&lt;String, Object&gt; 属性并使用大括号符号[] 作为动态映射键。

    例如

    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>
    

    字段名成为映射键,字段值成为映射值。

    【讨论】:

      猜你喜欢
      • 2017-11-12
      • 1970-01-01
      • 2020-12-16
      • 2014-01-17
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      • 2017-04-11
      • 1970-01-01
      相关资源
      最近更新 更多