JSF 2 selectOneRadio 未在 Bean 中设置值

JSF 2 selectOneRadio Not Setting value in Bean

我有一个包含以下单选按钮定义的 JSF 页面:

<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>

我有一个似乎工作正常的转换器。我已经完成了它,它正在做它应该在 get 和 set 上做的事情。

    @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,它是视图范围的。该列表在 UI 上显示正常,并且所有值似乎都在 google 网络开发工具中工作。当我单击其中一个单选按钮时,转换器的 getAsObject 触发并且 returns RentalDuration 的正确实例。但是从未调用 bean 中的 setSelectedDuration 方法。我试着用一个字符串列表设置一个简单的实现,这似乎工作得很好(相同的页面、bean 等)。 setTestString 方法被调用。我已经阅读了很多@BalusC 的帖子,以至于我的眼睛在流血,但我似乎无法弄清楚我做错了什么。

呃。似乎它永远不会失败;我可以在某件事上工作 16 个小时,在我 post 之后,我在 posting 后不久就找到了答案。问题是我填充支持列表以填充单选按钮的对象与我试图在转换器中使用的对象不同。我试图在转换器中创建新的 Duration 对象,我希望一些 JSF 魔术能够弄清楚它们与列表中的相同。一旦我将工厂设置为 return 相同的对象,支持方法 setSelectedDuration 方法就开始触发。如果有人能解释这是如何在 JSF 的内部运作的,我很想听听。对象的比较,然后选择对象的设置等