2017-02-10 92 views
0

我有一个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的帖子,以至于我的眼睛流血不止,但我似乎无法弄清楚我做错了什么。

回答

0

呃。它似乎从未失败;我可以在16小时内工作,在我发布后,我发现发布后的答案不会太长。问题是我用填充背景列表填充单选按钮的对象与我试图在转换器中使用的对象不同。我正在尝试在转换器中创建新的Duration对象,并且我希望JSF的一些魔法能够发现它们与列表中的一样。一旦我将工厂设置为返回相同的对象,则支持方法setSelectedDuration方法开始启动。如果任何人都可以解释这是如何在JSF的胆量中工作的,我很乐意听到它。对象的比较,然后是所选对象的设置等。

+0

下一次未设置setter或action时,请先通过http://stackoverflow.com/q/2118656。 – BalusC