【问题标题】:OmniFaces @Param fails to use converter to set a primitive propertyOmniFaces @Param 无法使用转换器设置原始属性
【发布时间】: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


【解决方案1】:

这个问题有三个方面:

  1. CDI 本身不支持注入原始默认值(需要自定义生产者)。
  2. @Param 从来没有首先支持原语(因为,实践不佳)。
  3. 当请求参数完全不存在时,永远不会调用 JSF 转换器。

为了解决 1 和 2,我创建了 issue 266,我会在 2.4 final 之前解决这个问题。

现在,只需使用 Integer 而不是 int。不使用原语作为模型属性也被认为是一种更好的做法,因为您可以使用null 区分“值从未提交”和“值已提交,但为空”。

此外,JSF 转换器从不打算作为“默认值提供者”。当请求参数完全不存在时,&lt;f:viewParam&gt; 案例也永远不会触发转换器。所以它“起作用”实际上是不正确的。设置0的效果只是EL强制的结果,不涉及转换器。当您将转换器从机箱中完全移除时,同样的问题也很明显。

【讨论】:

  • 谢谢,我很抱歉之前有点粗鲁
  • 我刚刚提交了修复,它在今天最新的2.4-SNAPSHOT 中可用。
  • 我终于有机会测试它并且它有效。你有机会把它上传到 maven 吗?
  • 2.4 最终版本即将发布。
猜你喜欢
  • 1970-01-01
  • 2013-01-25
  • 2014-10-01
  • 1970-01-01
  • 2012-04-25
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
相关资源
最近更新 更多