2016-08-07 48 views
0

Ich fülle ein Karussell mit Daten aus einem Array. Und ich möchte die Daten des Arrays mit den Daten ändern, die im Karussell eingestellt sind.p: Karussell gefüllt mit einem Array und Eingabetext nicht senden

<h:form id="newConditionPanelForm"> 
    <p:panelGrid id="newConditionPanelGrid"> 
     <p:row> 
      <p:column colspan="2"><h2>Define conditions</h2></p:column> 
     </p:row> 
     <p:row> 
      <p:column> 
       <p:outputLabel value="Condition Name:" /> 
      </p:column> 
      <p:column> 
       <h:outputText value="#{priceManagementMB.conditions.name}"></h:outputText> 
      </p:column> 
     </p:row> 
     <p:row> 
      <p:column colspan="2" style="text-align:center; width:100%"> 
       <p:carousel id="priceCarousel" 
             value="#{priceManagementMB.prices}" headerText="Price per hour" 
             var="priceEdit" 
             numVisible="1" 
             style="width:100%" 
             circular="true" 
             binding="#{carousel}" 
             responsive="true"> 
        <h:panelGrid columns="1"> 
         <p:row> 
          <p:column colspan="2"> 
           <h:outputText value="#{carousel.rowIndex + 1}h00" /> 
          </p:column> 
         </p:row> 
         <p:row> 
          <p:column> 
           <h:outputText value="Price during given Hour: " /> 
          </p:column> 
          <p:column> 
           <p:inplace id="inplacePrice" emptyLabel="click here to edit"> 
            <p:inputText id="priceEdit" value="#{priceEdit}"> 
            </p:inputText> 
           </p:inplace> 
          </p:column> 
         </p:row> 
        </h:panelGrid> 
       </p:carousel> 
      </p:column> 
     </p:row> 
    </p:panelGrid> 
    <h:commandButton value="Submit conditions" update="newConditionPanelGrid" 
        validateClient="true" action="#{priceManagementMB.updateCondition}"> 
    </h:commandButton> 
</h:form> 

Die Elemente in der Input, die in dem Karussell sind nicht an die Backing Bean vorgelegt, und ich kann sie nicht benutzen. Was mache ich falsch? Wie kann ich die Daten abrufen, ohne ihnen einen actionPropertyListner in einem Link oder einer Schaltfläche zu übermitteln? Ein Ereignis wie Unschärfe würde auch funktionieren, aber ich weiß nicht, wie ich es verwenden soll, ich brauche den Index und den neuen Wert. Das Array hat eine Länge von 24, eine für jede Stunde des Tages.

Antwort

0

JSF nach dem Senden versuchen, den richtigen Setter aufzurufen. Sie geben keine Details über den Preistyp an, aber ich vermute, dass Sie eine Klasse aus java.lang (Float, Double) verwenden.

Also dann, wenn Sie value="#{priceEdit}" JSF verwenden versuchen, setPriceEdit auf Double, Float zu verwenden. Im Detail ist es hier erklärt How does EL #{bean.id} call managed bean method bean.getId()

Die Lösung ist Ihre Klasse mit Setter verwendet (siehe What is the best data type to use for money in java app?). Wenn diese Klasse keinen Setter hat, können Sie immer Ihre eigene Klasse (Wrapper) mit dem richtigen Setter schreiben.

Einfaches Beispiel:

class MoneyWrapper { 
    private YourMoneyType value; 

    public setValue(YourMoneyType value){ 
     this.value = value; 
    } 

    public YourMoneyType getValue(){ 
     return this.value; 
    } 

}

als in Ihrem Bean können Sie Array enthält Elemente von MoneyWrapper verwenden. Und schließlich verwenden Sie es in Sicht wie diese value="#{priceEdit.value}"