【问题标题】:Bind dynamic properties using JSF [duplicate]使用 JSF 绑定动态属性
【发布时间】:2011-04-14 16:45:31
【问题描述】:

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

public class Property{

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

我的 backingBean 有这些属性的映射(出于某些其他原因,我们选择映射作为数据结构)。

public class BackingBean{

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

问题在于迭代此地图并为每个条目生成一个文本框。由于 a4j:repeat(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 的属性不会自动发生之外,这将正常工作。如果我尝试在 c:forEach 中使用 h:inputText,则组件不会被渲染。(猜想 jstl var 不适用于 jsf)。 有没有一种 JSF 方式来做这一切(使用 hashmap?以便为地图中的每个条目生成一个文本框,并且对它的任何更改都会绑定到底层 java bean 属性。?

【问题讨论】:

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

标签: java jsf


【解决方案1】:

建议的代码可以在当前版本的 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}" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多