2009-04-11 5 views
0

Ich habe eine Seite "start.jsf", die auf eine Aktion # {lineal.start} zeigt, diese Aktion leitet die Anfrage an "flow.jsf" weiter.JSF 1.1: Frage zu Lebenszyklen, warum das Renderattribut die unten beschriebene Aktion der verwalteten Bean beeinflusst?

Die verwaltete Bean "Lineal" (Anfrage Bereich) enthält einige Eigenschaften, von denen einer "lineal.operation" genannt, korrekt in "start.jsf" gefüllt.

Die Seite „flow.jsf“ hat eine Befehlsschaltfläche zeigt auf eine andere Managed Bean namens „objektliste“ (Session scoped), eine Eigenschaft Objekt mit dem Namen „objectList.selectedContractor“ (ein POJO in den Konstruktor initialisiert enthält, so seine Kinder Eigenschaften sind immer nur bei der ersten MB Aufruf leer, oder falsch?), seine Aktion ist # {objectList.itemInsert}.

Die Formularseite von "flow.jsf" enthält die folgenden Tags:

<h:form> 
<h:inputText id="crnameNew" value="#{objectList.selectedContractor.crname}" rendered="#{ruler.operation eq ruler.codeOperationNew}" /> 

<h:inputText id="someProp" value="#{objectList.someProp}" /> 
<h:commandButton styleClass="importedButton" value="insert" action="#{objectList.itemInsert}" /> 
</h:form> 

Nun, als ich die Aktion # einreichen {objectList.itemInsert}, nur "someProp" richtig in die MB gefüllt ist, während "selectedContractor.crname" leer ist.

ABER wenn ich das "gerendert" -Attribut vom Tag, das die # {objectList.selectedContractor.crname} bindet, umschalte, funktioniert es und wird korrekt gefüllt, wenn # {objectList.itemInsert} aufgerufen wird ... also warum "gerendert" die Bearbeitung einer Einreichung beeinflussen?

Antwort

1

Wie das Attribut andeutet, betrifft es nur das Rendering. Wenn es auf der Seite gerendert wird, wird der Wert zurück an die Bean-Formular-Übermittlung gesendet. Wenn es rendert und dies nicht passiert, dann stimmt etwas anderes nicht.

+0

In der Tat habe ich festgestellt, dass ein einfacher Test von sauberen Seiten funktioniert genau wie erwartet, Request Bereich verwalteten Beans hat keinen Einfluss auf das Rendering-Attribut. Außerdem ist das obige Formular mit einer Unteransicht innerhalb eines Includes verknüpft. Ich werde versuchen, ein bisschen Code zu löschen. –