我有一个JSF页面下面的单选按钮定义:JSF 2 selectOneRadio不设定值豆
<h:selectOneRadio id="durationList" value="#{rentalEquipmentCheckoutController.selectedDuration}" styleClass="durationList">
<f:selectItems var="d" value="#{rentalEquipmentCheckoutController.durationList}" itemValue="#{d}" itemLabel="#{d.label}">
</f:selectItems>
<f:converter converterId="durationConverter" />
<f:ajax />
</h:selectOneRadio>
我有一个似乎是工作的罚款转换器。我已经完成了它,它正在做它应该在获取和设置上做的事情。
@Override
public Object getAsObject(FacesContext context, UIComponent component, String durationHours) {
RentalDuration rentalDuration = DurationFactory.getDuration(Integer.parseInt(durationHours));
return rentalDuration;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object object) {
if (object != null) {
RentalDuration duration = (RentalDuration) object;
return Integer.toString(duration.getHours());
}
return "Error";
}
控制器是ManagedBean,它是视图范围。该列表在用户界面上显示效果良好,并且所有值似乎都可以在Google Web开发工具中使用。当我单击其中一个单选按钮时,转换器的getAsObject会触发并返回RentalDuration的正确实例。但bean中的setSelectedDuration方法永远不会被调用。我试着用一个字符串列表设置一个简单的实现,而且这似乎工作得很好(相同的页面,bean等)。 setTestString方法被调用。我读了@ BalusC的帖子,以至于我的眼睛流血不止,但我似乎无法弄清楚我做错了什么。
下一次未设置setter或action时,请先通过http://stackoverflow.com/q/2118656。 – BalusC