2012-04-05 128 views
0

輸入Textarea值永遠不會在bean側設置。 JSF 1.2與RichaFaces 3.3.3。有下面的代碼:h:inputTextarea不適用於豐富的表面

<h:form id="name" rendered="#{not empty controller}"> 
      <h:panelGrid columns="1" styleClass="medium" columnClasses="subtitle,medium" style="text-align: left;" cellspacing="3px"> 
       <f:facet name="header"> 
        <h:outputText value="Comments"/> 
       </f:facet> 

       <h:inputTextarea value="#{controller.comments}" rows="10" cols="80" 
         immediate="true"></h:inputTextarea> 

       <div align="right"> 
        <a4j:commandButton value="#{msg['label.save']}" action="#{controller.saveData()}" reRender="name" /> 
       </div> 
      </h:panelGrid> 
     </h:form> 

而且在豆:

public void saveData(){ 
    //logic 
} 

public String getComments(){ 
    return "comments"; 
} 

public void setComments(String comments){ 
    //logic 
} 

JSF頁面包含在通過UI另一頁:包括並得到需要bean作爲控制器參數。

評論通過get方法讀取,但是,setter從未被調用過,也不是saveData函數。相同的控制器用於其他頁面上的其他數據,並且實際上相同的方法工作得很好。我想知道爲什麼Textarea價值從未設置?

回答

1

你得到的錯誤是這一行:

<a4j:commandButton value="#{msg['label.save']}" 
    action="#{controller.saveData()}" reRender="name" /> 

在JSF1.2,你不應該在操作使用括號。更改爲

<a4j:commandButton value="#{msg['label.save']}" 
    action="#{controller.saveData}" reRender="name" /> 

此外,請檢查您發佈的頁面是否在您調用它時不在其他窗體中。

UPDATE:

根據您最後的評論,我想你的問題可能是這句話:

<h:form id="name" rendered="#{not empty controller}"> 

如果controller是請求Bean,那麼這將是對要求空,從而表格中的值將不會被髮送或激活。您可以嘗試讓bean滿足請求範圍,併爲bean類添加@KeepAlive註釋:

@KeepAlive(ajaxOnly=false) 
public class ControllerBean { 
    //your bean logic... 
    public void saveData(){ 
    //logic 
    } 

    public String getComments(){ 
     return "comments"; 
    } 

    public void setComments(String comments){ 
     //logic 
    } 
} 
+0

不,事實並非如此 - jboss ELs完成他們的工作。在其他部分使用完全相同的代碼(reRender組件除外),並且它可以工作。我的猜測是,它有一些其他的對象,由於某種原因沒有轉換爲字符串。正在調查...... – 2012-04-05 20:55:36

+1

您是否試圖使用另一個託管bean進行工作? – 2012-04-06 03:07:53

+0

事實上,它只適用於另一個班級......問題是:爲什麼? :) – 2012-04-06 08:16:05