h:selectOneMenu und Page-Refresh

  • Themenstarter Themenstarter JSF2
  • Beginndatum Beginndatum
J

JSF2

Gast
Hi,

ich setze JSF 2.0, RichFaces 3.3 und Spring Web Flow 2.1 ein und habe auf meiner Maske zwei Eingabefelder die die Attribute des ausgewählten Objekts beinhalten und eine Drop-Down-Box, über die der Benutzer ein Objekt auswählen kann. Nun möchte ich, dass wenn der Benutzer in der Drop-Down-Box ein anderes Objekt wählt, die zwei Eingabefelder bzw. dessen Inhalt auf das neue Objekt angepasst werden. Hierbei soll kein submit-Button oder ähnliches verwendet werden!

Mein aktueller Code sieht bisher folgendermaßen aus:
[XML]
<h:selectOneMenu id="selectObject" value="#{objectBean}">
<f:selectItems value="#{objectVector}" var="selectedObject" itemValue="#{selectedObject}" itemLabel="#{selectedObject.description}"/>
<a4j:support id="sessionAjax" event="onchange" reRender="showObject" ajaxSingle="true"/>
</h:selectOneMenu>
...
<a4j😱utputPanel id="showObject">
<h:inputText value="#{objectBean.name}" />
<h:inputText value="#{objectBean.description}" />
</a4j😱utputPanel>
[/XML]
und das Ganze natürlich in einer Form!

Meine Konfiguration von Spring Web Flow:
[XML]
<view-state id="Object" view="/Object.jsp">
...
<transition on="onchange" to="Object">
<render fragments="form1:showObject" />
</transition>
</view-state>
[/XML]

Allerdings habe ich das Gefühl, dass die Transition garnicht erst gestartet wird!?
 
Kenne mich mit Spring nicht so aus, aber ich vermute, dass dein Wert nach der Auswahl im SelectOneMenu gar nicht an Dein Backing-Bean durchgereicht wird da kein Submit kommt.

Habe das in einem ähnlich gelagerten Fall wie folgt gelöst [keine Garantie, dass das die beste Variante ist, aber es funktioniert 🙂]

Ich brauche ein Script, dass eine Funktion im Backend aufruft und einen übergebenen Wert (ID des ausgewählten Eintrages) an eine entsprechende Methode durchreicht ...

Java:
<h:form>
	<a4j:jsFunction name="setSelectedType">
		<a4j:actionparam name="type" assignTo="#{chartBean.selectedChartType}"/>
		<a4j:support event="oncomplete"   reRender="lineChart"/>
	</a4j:jsFunction>
</h:form>

Der Auswahl-Block sieht dann folgendermaßen aus:

Java:
<h:form id="ChartForm">

	<div id="dropDownDiv">
		<h:selectOneMenu id="TypeDD" value="#{chartBean.selectedChartType}" onchange="setSelectedType(this.value)">
			<f:selectItems value="#{chartBean.lineChartSelectItems}" />
		</h:selectOneMenu>			
	</div>
	<div id="chartDiv">
		 <p:lineChart id="lineChart" value="#{chartBean.entries}" var="entry" xfield="#{entry.label}" style="chartStyle">  
		     <p:chartSeries label="XYZ" value=" #{entry.value}" />  
		 </p:lineChart>
	</div>
	
</h:form>

hoffe das hilft vielleicht irgendwie weiter.
 
Dank dir schonmal für deine Antwort!

Du hast Recht, dass kein Submit erfolgt! Deshalb habe ich meinen Code wie folgt geändert:
[XML]
<f:view>
<h:messages />
<h:form id="form1">

<h😛anelGroup>
<h:selectOneMenu id="selectObject" value="#{objectBean}">
<f:selectItems value="#{objectVector}" var="selectedObject" itemValue="#{selectedObject}" itemLabel="#{selectedObject.name}" />
<a4j:support event="onchange" reRender="showObject" action="SELECT" />
</h:selectOneMenu>
<a4j:status startStyleClass="errorStyle" startText="Please Wait..."/>
</h😛anelGroup>

<a4j😱utputPanel id="showAbt">
<h:messages />
<h:inputText value="#{objectBean.name}" />
<h:inputText value="#{objectBean.description}" />
</a4j😱utputPanel>

</h:form>
</f:view>
[/XML]

Da action="SELECT" ist und eine Transition "SELECT" in Spring Web Flow existiert, werden dort die erforderlichen Werte gesetzt, ...!
Soweit so gut, allerdings funktioniert das Ganze nur, wenn der Vector nur Strings enthält und der obige Code angepasst wird bzw. speziell die Methodenaufrufe entfernt werden. Beinhaltet der Vector wie im obigen Fall Objekte, erhalte ich mit h:messages folgenden Fehler:
Konvertierungsfehler beim Festlegen von Wert '[..., ..., ...]' für 'null Converter'.

Ich vermute, dass JSF nun die Objekte nicht mehr zurückkonvertieren kann, weil es die Klasse nicht kennt! Wie kann ich JSF nun mitteilen, von welchem Klassentyp die Objekte sind?
 

Zurück
Oben