我只是试图更改选择输入框的值。加载页面会进入 pubcategory 属性的 getter 方法的断点。目前很好。更改值,不会调用 setter 方法。我触发了 Richfaces ajax 处理。我确认,所有 JSF 阶段都已完成(我还看到了 JPA-SQL 选择查询,我希望在其中使用更新语句来更改值 - 好吧,如果未触发 setter 方法,则不可能)。这是我的 selectOneMenu 代码
<h:selectOneMenu id="pubCategoryId" converter="#{pubCategoryConverter}" value="#{pubController.pubCategory}">
<f:selectItems value="#{listPubCategoryController.pubCategories}" var="category" itemLabel="#{category.name}" itemValue="#{category}" />
<a4j:ajax event="change" execute="@this" />
</h:selectOneMenu>
<h:message for="pubCategoryId" style="color:red" />
两次都调用我的转换器。getAsString 方法,当我加载页面和 getAsObject 时触发 on-change 操作。由此我得出结论,更改确实可以追溯到服务器。但是 - 再一次 - 它永远不会触发 setter 方法。
@ManagedBean(name = "pubCategoryConverterController")
@FacesConverter(value = "pubCategoryConverter")
//@Named
public class PubCategoryConverter implements Converter {
@Inject
private PubCategoryRepository pubCategoryRepository;
public PubCategoryConverter() {
}
// from page to backing bean
@Override
public Object getAsObject(FacesContext ctx, UIComponent component,
String value) {
PubCategory pubCat = pubCategoryRepository.getPubCategoryById(new Long(
value));
return pubCat;
}
// from backing bean to page
@Override
public String getAsString(FacesContext fc, UIComponent uic, Object o) {
PubCategory pubCat = ((PubCategory) o);
return pubCat.getId().toString();
}
}
如果我用@Named 而不是@FacesConverter/@ManagedBean 来注释转换器,情况也是如此。任何线索或提示任何人?
使用 JBoss 7.1.1、Richfaces 4.3.3、JSF 2.0