【发布时间】:2016-06-16 11:55:05
【问题描述】:
@Inject @Param(converter = "#{pageConverter}") // or "pageConverter"
private int page;
@Named
@ApplicationScoped
public class PageConverter implements Converter
在 page 上使用 OmniFaces @Param 时,我得到一个异常
java.lang.IllegalArgumentException: Can not set int field com.example.Bean.page to null value
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
at sun.reflect.UnsafeIntegerFieldAccessorImpl.set(UnsafeIntegerFieldAccessorImpl.java:80)
at java.lang.reflect.Field.set(Field.java:758)
at org.jboss.weld.injection.FieldInjectionPoint.inject(FieldInjectionPoint.java:94)
...
我的转换器应该会处理这个问题,但永远不会调用 getAsObject。
这行得通:
<f:metadata>
<f:viewParam name="page" value="#{bean.page}">
<f:converter binding="#{pageConverter}"/>
</f:viewParam>
</f:metadata>
【问题讨论】:
-
如果以其他方式使用,您的转换器是否工作?
-
是的,它在使用视图标签时确实有效
-
Omnifaces 版本?
-
如果将其设为 Integer 而不是 int 是否有效?可能是 int 不能作为对象返回,所以也许这就是根本不调用转换器的原因。
-
@Kukeltje 在 Maven 上的最新消息。我尝试使用 Integer 并没有解决它。我认为调用 return 0 时 int 会自动装箱在 Integer 中。您个人使用此功能吗?我认为问题在于,omnifaces 根本找不到我的转换器
标签: jsf converter cdi omnifaces param