2012-01-06 73 views
0

我的bean是viewscoped。我有一個簡單的字符串屬性與getter和setter。吸氣劑工作正常(通過初始化屬性檢查),但不是設置者。在setter方法中,我使用每個傳入參數構建一個Stringbuffer。Bean屬性未更新

代碼:

public String getParamval() { 
    return paramval; 
} 

public void setParamval(String paramval) { 
    logger.info("Incoming value:" + paramval); 
    pvals.append(paramval); 
    this.paramval = "VAL"; 
} 

是不是錯了?我已經在setter中進行了測試,看看是否傳入了輸入字符串,但顯然該方法根本沒有被調用/調用。在視圖中使用#{}表示法。

查看:

<c:forEach items="${gdsiGeodataBean.requiredfields}" var="reqs"> 
     <h:outputLabel value="#{reqs}:* " /> 
     <pou:inputText value="#{gdsiGeodataBean.paramval}" required="true" requiredMessage="Input is required."/> 
</c:forEach> 

,爲什麼我會想要建立一個setter方法一個StringBuffer?因爲輸入文本是基於動態列表動態創建的。我只有一個要綁定的bean屬性。

我知道我可以使用地圖,但出於與上述相同的原因,我似乎無法在setter方法中更新地圖值。這與我在此處詢問的問題相關Updating a map value in a managed bean

回答

3

即使方法完全錯誤(在提交表單後,getter不會返回正確的值!),並且我已經回答了關於使用地圖的previous question ,在這種特殊情況下確實應該調用二傳手。

沒有調用setter可能有幾個原因。最有名的是該表格未被放置在<h:form>之內,或者您錯誤地將多個<h:form>嵌套在彼此之內。另一個原因是輸入組件或其父項之一具有rendered屬性,在提交請求期間碰巧評估false

+0

嚮導組件位於對話框組件內的之內。這個表單裏面和對話框裏都沒有其他的形式。在視圖中,渲染的屬性沒有設置爲false。我想我需要檢查viewtree來確定這一點。 – algone 2012-01-06 13:02:08

+0

發生了一些奇怪的事情。我用標記替換了標記,現在setter工作。這是爲什麼? – algone 2012-01-06 13:10:45

+0

顯然你依賴於視圖渲染時間表達式。長話短說:http://stackoverflow.com/questions/3342984/jstl-in-jsf2-facelets-makes-sense – BalusC 2012-01-06 13:14:51