2010-09-20 96 views
0

我有一個編輯屏幕,顯示一系列實體的可編輯屬性(字段)。這個字段列表是動態的,因爲任何字段都可以在沒有任何代碼更改的情況下從列表中添加/刪除。我有一個這樣的模型。使用JSF綁定動態屬性

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:重複(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的屬性不會自動發生。如果我嘗試使用h:inputText之內c:forEach,組件不會呈現(猜測jstl var不適用於jsf)。 有沒有JSF的方式做這一切(使用散列圖?所以一個文本框是爲地圖中的每個條目生成的,並且它的任何改變都被綁定到底層的java bean屬性。

+0

9個月後,我有完全一樣的問題。你有沒有解決它? – 2011-06-28 07:27:44

+0

不,只是以非jsf方式實現它。 – chedine 2011-07-21 09:08:17

回答

0

提出的代碼無法在當前版本的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}" />