【发布时间】:2013-09-04 14:10:12
【问题描述】:
我只是尝试更改选择输入框的值。加载页面会进入 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
【问题讨论】:
-
你试过用
<f:ajax/>代替<a4j:ajax event="change" execute="@this" />吗? -
不。以前试过。没什么区别。相同的行为:遍历所有 JSF 面,但不触发 setter 方法。 (无论如何感谢您的反馈)
-
服务器日志中是否有任何消息,我的意思是,尝试将 id 添加到
h:message中,如下所示:<h:message id="myMessageId" for="pubCategoryId" style="color:red" />并使用<f:ajax render="myMessageId"/>呈现它 -
删除
@ManagedBean(name = "pubCategoryConverterController")注释。@FacesConverter就足够了,将其引用为converter="pubCategoryConverter"。尝试将选择作为对象获取时,您的转换器可能会失败,因此请调试它并查看会发生什么。 -
@XtremeBiker 如果我删除了“@ManagedBean”,则“@Inject”或“@EJB”注释不会注入 bean。