2012-04-05 8 views
0

Eingabe Textarea-Wert wird nie auf der Bean-Seite festgelegt. JSF 1.2 mit RichaFaces 3.3.3. nächsten Code haben:h: inputTextarea funktioniert nicht in Rich-Faces

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

Und in der Bohne:

public void saveData(){ 
    //logic 
} 

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

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

Die JSF-Seite wird in einer anderen Seite durch ui enthalten: include und wird benötigt Bean als Controller Parameter.

Kommentare werden gelesen get Methode, aber Setter wird nie aufgerufen, noch ist saveData Funktion. Der gleiche Controller wird für einige andere Daten auf einer anderen Seite verwendet und dort funktioniert die gleiche saveData Methode großartig. Ich frage mich, warum der Textarea-Wert nie festgelegt wird?

Antwort

1

Der Fehler Sie bekommen ist für diese Linie:

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

In JSF1.2, sollten Sie nicht die Klammer in der Aktion verwenden. Ändern Sie es für

Überprüfen Sie auch, dass die Seite, die Sie veröffentlichen, nicht in einem anderen Formular ist, wenn Sie es aufrufen.

UPDATE:

Basierend auf Ihrem letzten Kommentar, ich denke, Ihr Problem in diesem Satz könnte:

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

Wenn controller eine Anfrage Bean ist, dann wird es auf Antrag leer sein, so Die Werte in Ihrem Formular werden nicht gesendet oder aktiviert. Sie können versuchen, Ihre Bean mit Anforderungsbereich beizubehalten und die Anmerkung @KeepAlive für Ihre Bean-Klasse hinzuzufügen:

@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

Nein, das ist nicht der Fall - jboss ELs machen ihre Arbeit. Und der genau gleiche Code (außer für die reRender-Komponente) wird im anderen Teil verwendet und es funktioniert. Meine Vermutung ist, dass es ein anderes Objekt hat, das aus irgendeinem Grund nicht in eine Zeichenkette umgewandelt wird. Untersuchen ... –

+1

haben Sie versucht, es mit einer anderen verwalteten Bean funktionieren zu lassen? –

+0

In der Tat funktioniert es einfach mit einer anderen Klasse ... Die Frage ist: warum? :) –