Verschachtelte Composite Components funktionieren nicht mit Primfaces Control

Hallo,

ich stelle mein Model mit verschachtelten Composite Components dar. Das sieht so aus:
Hier werden die Steps mittels com:Step dargestellt.

                <h:form>
                    <p:dataList id="steps" value="#{RecipeBean.recipe.steps}" var="step" itemType="disc">
                        <com:Step stepId="#{step.id}" description="#{step.stepDescription}" removeText="#{msg['step.delete']}" removeAction="#{RecipeBean.removeStep(step)}"
                                  Quantities="#{step.quantity}" addText="#{msg['quantity.add']}" addAction="#{RecipeBean.addQuantity(step)}"
                                  completeMethodMeasurement="#{RecipeBean.completeMethodMeasurement(query)}"/>
                    </p:dataList>
                    <p:commandButton id="addstep" value="#{msg['step.add']}" action="#{RecipeBean.addStep}" update="steps"/>
                    <p:commandButton id="save" value="#{msg['default.save']}" action="#{RecipeBean.save}" update="steps"/>
                </h:form>

Die Steps zeigen widerum das com:Quantity Control an.

<h:inputHidden id="id" value="#{cc.attrs.stepId}" />
        <p:inplace widgetVar="basic_#{cc.attrs.stepId}">
            <p:inputText value="#{cc.attrs.description}" id="description">
                <p:ajax event="blur" oncomplete="basic_#{cc.attrs.stepId}.hide();" />
            </p:inputText>
        </p:inplace>
        <h:commandButton id="removeStep" action="#{cc.attrs.removeAction}" value="#{cc.attrs.removeText}" />
        <!-- show Quantities -->
        <p:dataList id="quantities" value="#{cc.attrs.Quantities}" var="quantity" itemType="disc">
            <com:Quantity Amount="#{quantity.amount}" Measurement="#{quantity.getMeasurement()}" Ingredient="#{quantity.getIngredient()}" 
                          completeMethodMeasurement="#{cc.attrs.completeMethodMeasurement}" />
        </p:dataList>
        <p:commandButton id="addQuantity" action="#{cc.attrs.addAction}" value="#{cc.attrs.addText}" update="quantities"  />

Und hier der Inhalt vom com:Quantity Control. Ich habe bzw. will die input Elemente durch das p:AutoComplete Control ersetzen.

 <h:inputHidden id="id" value="#{cc.attrs.QuantitieId}" />
        <h:inputText id="amount" value="#{cc.attrs.Amount}" />
        <h:inputText id="measurement" value="#{cc.attrs.Measurement.name}" />
        <!--<p:autoComplete id="measurement" completeMethod="#{cc.attrs.completeMethodMeasurement}" maxResults="20" value="#{cc.attrs.Measurement}"  var="p" itemLabel="#{p.name}" 
                        itemValue="#{p}" converter="#{measurementStringConverter}"   forceSelection="true" />     -->

        <h:inputText id="ingredient" value="#{cc.attrs.Ingredient.name}" /> 

Wenn ich im com:Quantity nun das Input Feld mit id=“measurement” auskommentiere und stattdessen das vorgesehene p:AutoComplete verwende, funktionieren sämtliche Buttons auf der Seite nicht mehr.

Weder der Button Save noch der Button addStep. Lösche ich das autoComplete hingegen funktionieren die Buttons wieder.

Mir ist das ein Rätsel und ich weiß nicht wie ich vorgehen soll damit ich das Problem finden kann. Setze ich einen Breakpoint in die aufgerufenen Funktion vom Button springt der Debugger nur hinein, wenn ich das AutoComplete Control nicht verwende.

Hat jemand Rat?

Hallo Leute,

ich habe mir den generierten Quellcode angesehen und geschaut was der Button macht. Er ruft die JS Funktion PrimeFaces.ab({source:‘j_idt8:addstep’,update:‘j_idt8:steps’}); auf. Dabei wird beim Aufruf der JS Funktion folgendes zurück gegeben:

<partial-response id="j_id1"><error><error-name>class javax.faces.application.ViewExpiredException</error-name><error-message><![CDATA[viewId:/editRecipe.xhtml - View /editRecipe.xhtml could not be restored.]]></error-message></error></partial-response>

Hm, was kann ich den da jetzt machen:
Mein Bean sieht so aus:

@ManagedBean(name = "RecipeBean")
@ViewScoped
public class RecipeBean { [...] 

Wenn ich zum AutoComplete die Process Propertie mit Process="@this" festlege gibt die JS Funktion folgendes zurück:

<partial-response id="j_id1"><error><error-name>class javax.faces.component.UpdateModelException</error-name><error-message><![CDATA[/resources/Get.comp/Quantity.xhtml @27,126 value="#{cc.attrs.Measurement}": /resources/Get.comp/Step.xhtml @48,95 Measurement="#{quantity.getMeasurement()}": Illegal Syntax for Set Operation]]></error-message></error></partial-response>

Ich habe im Internet noch folgendes gefunden, jedoch ohne Lösung:

Theoretisch wird das auch relativ schwierig. Wenn ich das richtig gesehen habe, hast du in einer Tabelle immer die Gleichen ID´s. Das bedeutet, dass die Elemente nicht mehr eindeutig sind.
Ich vermute, dass bei dem Erstellen des DOM´s etwas schief geht und daher der Rest der Page nicht mehr funktioniert…
Da bei der AutoComplete Box auch js erzeugt wird, wird das wahrscheinlich die Ursache dafür sein.
Du kannst ja mal die ID der autocomplete weglassen und gucken ob die anderen Buttons noch funktionieren …

Ich habe die <p: commandButton’s durch <h: commandButton’s ersetzt. Danach hats funktioniert. Wobei ich auch noch ein paar Panelgroup’s eingefügt habe. Also was schlussendlich zur Lösung des Problems geführt hat, kann ich nicht zu 100% sagen. Aber ziemlich Buggy dieses Primfaces :o