我想在JSF中实现以下UI。
[RadioButton] [图片] [标签]
[RadioButton] [图片] [标签]
[RadioButton] [图片] [标签]等等......
实现以下代码后,UI看起来不错。但是当我点击任何单选按钮时,虽然bean类被valueChanged事件更新,但UI中没有出现选择(未检查无线电)。那么如何设置selectOneRadio?
JSF代码:
<!-- payment options -->
<ui:repeat value="#{shoppingCartBean.paymentMethods}" var="m">
<!-- radio button -->
<div style="float:left;">
<ice:selectOneRadio
value="#{shoppingCartBean.selectedPaymentMethod}"
layout="pageDirection"
partialSubmit="true"
valueChangeListener="#{shoppingCartHandler.valueChanged}">
<f:selectItem itemLabel="" itemValue="#{m}"/>
</ice:selectOneRadio>
</div>
<!-- card image -->
<div style="float:left;">
<ice:graphicImage value="#{layoutBean.currentImagesPath}/#{m}.png"/>
</div>
<!-- payment method description or label -->
<div style="padding: 10px">
<ice:outputText value="#{bundleMessages.messages[m]}"/>
</div>
<div style="clear:both;"></div>
</ui:repeat>
<!-- payment options end-->
和bean类中的方法:
public List<String> getPaymentMethods() {
List<String> paymentMethods = new ArrayList<String>();
paymentMethods.add("crditcard");
paymentMethods.add("directbanking");
paymentMethods.add("paypal");
return paymentMethods;
}
public String getSelectedPaymentMethod() {
return this.selectedPaymentMethod;
}
public void setSelectedPaymentMethod(String selectedPaymentMethod) {
this.selectedPaymentMethod = selectedPaymentMethod;
}
处理程序类中的和valueChanged事件:
public void valueChanged(ValueChangeEvent event) {
String value = null;
if (event.getSource() instanceof HtmlSelectOneRadio) {
value = ((String) event.getNewValue());
}
if (value != null) {
this.shoppingCartBean.setSelectedPaymentMethod(value);
}
}
答案 0 :(得分:0)
实际上,radioOneButton&#39; value =&#34;#{shoppingCartBean.selectedPaymentMethod}&#34;&#39;用空或错字符串多次覆盖。因此,单选按钮中始终显示错误或无选择。
我做了以下解决方法,以避免错误地设置&quot; selectedPaymentMethod&#39; Bean类中的属性。并确保选择了付款方式&#39;只会通过&#39; valueChanged&#39;更新Handler类中的方法。
Handler类的valueChanged事件中所做的更改:
public void valueChanged(ValueChangeEvent event) {
String value = null;
if (event.getSource() instanceof HtmlSelectOneRadio) {
value = ((String) event.getNewValue());
}
if (value != null) {
this.shoppingCartBean.setPaymentMethod(value);
}
}
Bean类中的修改:
public void setSelectedPaymentMethod(String selectedPaymentMethod) {
// DO NOTHING, Leave this method empty
}
public void setPaymentMethod(String paymentMethod) {
this.selectedPaymentMethod = paymentMethod;
}
现在&#39; getSelectedPaymentMethod&#39;始终返回当前选定的单选项,以便检查正确的单选项。