JSFページで、最初の請求名フィールドに名前を入力するときに問題が発生しました。[請求先住所をコピーする]チェックボックスをクリックすると、これにより、配送先住所パネルのレンダリングが停止し、ajaxを介して非表示になります。最初のフィールドに入力した値は、以前の状態にリセットされます。
JSFページ
<h:form>
<p:inputText value="#{addressBean.billingAddress.firstName}" required="true"/ >
<p:selectBooleanCheckbox value="#{addressBean.copyBillingAddress}" id="duplicateBillingDetails">
<f:ajax render="@form" />
</p:selectBooleanCheckbox>
<h:panelGrid rendered="#{not addressBean.copyBillingAddress}" columns="3">
<p:inputText value="#{addressBean.deliveryAddress.firstName}"/>
</h:panelGrid>
<p:commandButton value="Checkout" action="#{addressBean.saveAddress}"/>
</h:form>
バッキングビーン
@Component
@Scope("view")
public class AddressBean implements Serializable {
@Inject
private CurrentUserBean currentUserBean;
@Inject
private UserService userService;
private Address deliveryAddress = new Address();
private Address billingAddress = new Address();
private boolean copyBillingAddress;
public AddressBean() {
}
public boolean isCopyBillingAddress() {
return copyBillingAddress;
}
public void setCopyBillingAddress(boolean copyBillingAddress) {
this.copyBillingAddress = copyBillingAddress;
}
public String saveAddress() {
if (copyBillingAddress) {
deliveryAddress = new Address(billingAddress);
}
User user = currentUserBean.getUser();
if (!billingAddress.isSame(user.getBillingAddress())) {
user.setBillingAddress(billingAddress);
}
if (!deliveryAddress.isSame(user.getDeliveryAddress())) {
user.setDeliveryAddress(deliveryAddress);
}
currentUserBean.setUser(userService.save(user));
return "/checkout.xhtml";
}
public CurrentUserBean getCurrentUserBean() {
return currentUserBean;
}
public void setCurrentUserBean(CurrentUserBean currentUserBean) {
this.currentUserBean = currentUserBean;
}
public Address getDeliveryAddress() {
return deliveryAddress;
}
public void setDeliveryAddress(Address deliveryAddress) {
this.deliveryAddress = deliveryAddress;
}
public Address getBillingAddress() {
return billingAddress;
}
public void setBillingAddress(Address billingAddress) {
this.billingAddress = billingAddress;
}
}