2016-05-13 11 views
1

Ich habe ein p: inputTextarea und ich brauche den Wert während der Verarbeitung des Formulars. Es stellte sich heraus, dass ich jedes Mal, wenn ich das Formular abschicke, alle Werte außer dem aus dem Textfeld erhalte. #{xyzUI.description} ist ein String-Objekt mit regulären Gettern und Setter.p: inputTextarea gibt eine leere Zeichenfolge zurück

<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> 

In meiner Backing-Bean ist der Wert immer "". Ich weiss nicht, was falsch ist.

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

Es scheint mir, die Quelle des Problems ist nicht in der gezeigten Code. Wo ist dein Knopf? Was ist der Bean-Umfang? Zeige den Getter/Setter. Haben Sie verschachtelte Formulare? Zeigen Sie mehr .. –

+0

Der Bean-Bereich ist @ViewScoped. Ich habe nur eine Form, die die ganze Ansicht umgibt. Ich habe die Schaltfläche zum Code hinzugefügt. Entschuldigung, ich habe den Code auf Lesbarkeit getrimmt und den commandButton vergessen. – baumlol

+0

Können wir Ihre gesamte Backbohne sehen? Wie @ JaqenH'ghar erwähnte, könnte es sein, dass Sie einen Setter auf dieser Bean-Property verpasst haben. –

Antwort

1

Ich habe Ihren Code lokal ausgeführt und das Problem entdeckt. Entfernen Sie in der Befehlsschaltfläche den p: ajax-Aufruf.

PrimeFaces-Befehlsschaltflächen sind standardmäßig aktiviert.

So dies ändern:

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

Um dies:

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

Mein Backing Bean Referenz

@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

Im Prinzip hat OP "process =" @ this "' anstelle von 'process =" @ form "' falsch verwendet. Siehe auch http://StackOverflow.com/q/25339056 – BalusC

Verwandte Themen