Dears, bei diesem Code haben wir zwei Ajax-Anrufe, um die Zahlungsmethode und die Paketnummer einzustellen. Der erste Aufruf setzt die Bean perfekt. Aber das zweite nicht. Es ruft den Konverter ohne Probleme auf, aber der Setzer wird nie aufgerufen. Die Variable cartView.PaymentParcel ist also immer null.Primefaces p: ajax + p: selectOneButton nicht aufrufen Bean Setter
<p:panel id="payMethodPanel" class="Container" header="2.#{msg.payment_method}">
<p:selectOneRadio id="paymentRadio" layout="custom" value="#{cartView.paymentMethod}" converter="paymentConverter">
<p:ajax process="paymentRadio" update="cartForm:payMethodPanel cartForm:summaryPanel" />
<f:selectItems value="#{paymentView.paymentsMethods}" />
</p:selectOneRadio>
<ui:repeat value="#{paymentView.paymentsMethods}" var="paym">
<div class="MarTop10">
<p:radioButton for="cartForm:paymentRadio" itemIndex="#{paymentView.index}" />
<h:outputText value="#{msg[paym.name]} " />
<h:outputFormat value="#{msg.discount_text}" rendered="#{fn:length(paym.parcels) eq 1 and paym.parcels[0].discount gt 0}">
<f:param value="#{paym.parcels[0].discount}" />
</h:outputFormat>
<h:outputText value="#{msg.installment}" rendered="#{fn:length(paym.parcels) gt 1}"/>
<p:selectOneButton id="parcelButtom" value="#{cartView.paymentParcel}" converter="paymentParcelConverter" rendered="#{fn:length(paym.parcels) gt 1 and cartView.paymentMethod eq paym}">
<p:ajax process="parcelButtom" update="parcelButtom cartForm:summaryPanel" />
<f:selectItems value="#{paym.parcels}" var="par" itemValue="#{par}" itemLabel="#{par.parcel}x #{par.interest eq 0 ? msg.without_interest : msg.with_interest}" />
</p:selectOneButton>
</div>
</ui:repeat>
<div class="EmptyBox10"></div>
</p:panel>
Bean-Code
@SessionScoped
@ManagedBean(name = "cartView")
public class CartView implements Serializable {
private PaymentParcel paymentParcel;
public PaymentParcel getPaymentParcel() {
return paymentParcel;
}
public void setPaymentParcel(PaymentParcel paymentParcel) {
this.paymentParcel = paymentParcel;
}
}
=== aktualisieren ===
Nach der Ajax-Anforderung zu analysieren ich ein Validierungsproblem bemerkt haben, und ich habe ap: Nachrichtenkomponente zu sehen, was Happing und Ich bekomme die folgende Nachricht:
Ich verstehe nicht, warum der Wert ungültig ist debugged die konverg ter: Hier ist der Code:
@FacesConverter("paymentParcelConverter")
public class PaymentParcelConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
String[] split = value.split(";");
return new PaymentParcel(Long.parseLong(split[0]), Double.parseDouble(split[1]), Double.parseDouble(split[2]));
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value instanceof PaymentParcel) {
PaymentParcel parcel = (PaymentParcel) value;
return new StringBuilder()
.append(parcel.getParcel()).append(';')
.append(parcel.getDiscount()).append(';')
.append(parcel.getInterest()).toString();
} else {
return "";
}
}
}
Glassfish 4.1
Primefaces 5.3.0 + Modena Theme 2.1.1
Mojarra 2.2.13
Bitte teilen Sie auch Ihren Java-Code. – DiSol
Hallo DiSol der Java-Code ist recht einfach. Ich vermute, das war ein Validierungsproblem. Ich untersuche gerade die Ajax-Anfragen. –
Haben Sie eine gleichwertige Methode für Ihre PaymentParcel-Klasse? – DiSol