jsf - 如何动态构建back bean编辑表单

标签 jsf jsf-2 dynamic-forms

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

最佳答案

将其绑定(bind)到 Map<String, Object>属性并使用大括号表示法 []为动态 map 键。

例如

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>

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

关于jsf - 如何动态构建back bean编辑表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7010256/

相关文章:

jsf-2 - JSF - @PostConstruct 和构造函数的直接方法调用有什么区别?

javascript - 动态输入字段不随表单一起发布

jsf - 通过 f :attribute to f:ajax listener inside composite implementation

java - 如何从 ExternalContext 获取 webapp 的绝对 URL?

java - 将 HTML 超链接添加到 java 资源包属性文件

jquery - 在不修改 JAR 的情况下升级 primefaces.jar 中的 jquery.js

ajax - 动态选择下拉菜单 Rails 5/AJAX

c# - 在 .NET 中,如何防止或处理在提交前篡改禁用字段的表单数据?

jsf - 应用程序范围 bean 中的实用方法

jsf - 使用字符集 ISO-8859-1