2016-05-13 236 views
1

我有一個p:inputTextarea,並且在處理表單時我需要它的值。事實證明,每次我提交表單時,我都會得到除textarea之外的所有值。 #{xyzUI.description}是一個帶有常規getter和setter的String對象。p:inputTextarea返回空字符串

<ui:composition> 
    <h:form id="form1"> 
     <p:panel rendered="..."> 
      <p:panel id="formPanel"> 
       <p:panelGrid columns="2" cellpadding="5"> 
        <!-- other form elements --> 
        <p:outputLabel>Description:</p:outputLabel> 
        <p:inputTextarea value="#{xyzUI.description}" style="width: 350px;" counter="display" counterTemplate="{0} characters remaining" maxlength="2000" autoResize="true" rows="4" /> 
        <h:panelGroup /> 
        <h:outputText id="display" /> 
       </p:panelGrid> 
       <p:commandButton rendered="#{not xyzUI.noChange}" action="#{xyzUI.submitForm}" update="formPanel" ajax="true" value="Apply" > 
        <p:ajax update="formPanel"></p:ajax> 
       </p:commandButton> 
      </p:panel> 
     </p:panel> 
    </h:form> 
<ui:composition> 

在我的支持bean中,值總是「」。我不知道什麼是錯的。

public void submitForm() 
{ 
    ... 
    tmp.setDescription(description); // String is always "" while debugging 
    myList.add(tmp); 
    RequestContext.getCurrentInstance().update("content"); 
} 
+0

在我看來,問題的根源並不在所示碼。你的按鈕在哪裏?什麼是豆的範圍?顯示getter/setter。你有嵌套表單嗎?顯示更多.. –

+0

bean作用域是@ViewScoped。我只有一種形式圍繞整個視圖。我已將該按鈕添加到代碼中。對不起,我修剪了代碼的可讀性,並忘記了commandButton。 – baumlol

+0

我們可以看到你的整個支持bean嗎?正如@ JaqenH'ghar提到的那樣,你可能錯過了那個bean的setter。 –

回答

1

我在本地運行您的代碼並發現問題。在命令按鈕中,刪除p:ajax調用。

PrimeFaces命令按鈕默認爲啓用ajax。

所以改變這樣的:

<p:commandButton rendered="#{not xyzUI.noChange}" action="#{xyzUI.submitForm}" update="formPanel" ajax="true" value="Apply" > 
    <p:ajax update="formPanel"></p:ajax> 
</p:commandButton> 

要這樣:

<p:commandButton rendered="#{not xyzUI.noChange}" action="#{xyzUI.submitForm}" update="formPanel" value="Apply" /> 

我支持bean參考

@ManagedBean 
@ViewScoped 
public class xyzUI implements Serializable{ 

    private static final long serialVersionUID = 6259024062406526022L; 

    private String description; 
    private boolean noChange = false; 

    public xyzUI(){ 

    } 

    public void submitForm(){ 
     System.out.println(description); 
    } 

    public boolean isNoChange() { 
     return noChange; 
    } 

    public void setNoChange(boolean noChange) { 
     this.noChange = noChange; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

} 
+0

基本上,OP錯誤地使用了'process =「@ this」'而不是'process =「@ form」'。另見http://stackoverflow.com/q/25339056 – BalusC