2010-11-30 8 views
2

Haben folgende erste .jsf:Set Eigenschaften JSF Managed-Bean

<ui:repeat var="prod" value="#{showProducts.decoys}"> 
    <h:form> 
     {prod.price} 
     {prod.weight} 
     {prod.size} > 
    <h:commandButton value="Buy" action="shoppingCart"/> 
    </h:form> 
</ui:repeat> 

Haben folgende shoppingCart.jsf:

<h:form> 
<h:dataTable value="#{prod}"> 
    <h:column> 
    #{prod.name}<br/> 
    </h:column> 
    <h:column> 
    #{prod.price}<br/> 
    </h:column> 
    <h:column>   
    <h:inputText value="#{prod.count}" size="3"/> 
    </h:column> 
</h:dataTable> 
<h:inputText value="#{order.phone}"/><br/> 
<h:inputText value="#{order.mail}"><br/> 
<h:inputText value="#{order.city}"/><br/> 
<h:commandButton value="Order" action="#{showProducts.persistOrder}"> 
</h:form> 

Faces-config:

<managed-bean> 
     <managed-bean-name>showProducts</managed-bean-name> 
      <managed-bean-class>main.ShowProducts</managed-bean-class> 
      <managed-bean-scope>session</managed-bean-scope> 
... 
      <managed-property> 
       <property-name>product</property-name> 
       <value>#{product}</value> 
      </managed-property> 
     </managed-bean> 

    <managed-bean> 
     <managed-bean-name>product</managed-bean-name> 
     <managed-bean-class>main.Product</managed-bean-class> 
     <managed-bean-scope>session</managed-bean-scope> 
    </managed-bean> 
... 

Das Problem:
verwalteter Bean-Name definiert als product
Iteration geht auf diese Weise (shoppingCart.jsf):
h:dataTable value="#{prod}">
so bedeutet dies, dass diese Iteration nicht mit Bean mit dem Namen product sowieso

So richten Eigenschaften prod.price,prod.weight,prod.count auf reale Managed Bean Eigenschaften verbunden ist:

product.price,product.weight,product.size 

Antwort

5

Es gibt zwei Probleme:

  1. Sie ‚aren t Setzen Sie eine spezifische prod in der Sitzung beanspruchte Bean. Du solltest das tun.

    <h:commandButton value="Buy" action="shoppingCart"> 
        <f:setPropertyActionListener target="#{showProducts.product}" value="#{prod}" /> 
    </h:commandButton> 
    

    By the way, die managed-property Erklärung setzt nur eine neue/leere Bohne als Eigentum während Rillenverzahnungs der Eltern Bohne. Dies ist nicht unbedingt die selbe Instanz, wie Sie in der ui:repeat haben. Sie können die #{product} Bohne einfach von Ihrem faces-config.xml entfernen.

  2. Die h:dataTable macht hier keinen Sinn. Sie benötigen h:panelGrid hier.

    <h:panelGrid columns="3"> 
        <h:outputText value="#{showProducts.product.name}" /> 
        <h:outputText value="#{showProducts.product.price}" /> 
        <h:outputText value="#{showProducts.product.count}" /> 
    </h:panelGrid> 
    
+0

BalusC, vielen Dank. Es funktioniert. Ich weiß nicht einmal über sergionni