【问题标题】:SEAM Solder @RequestParam in @ViewScoped Bean with AJAX使用 AJAX 在 @ViewScoped Bean 中焊接 @RequestParam
【发布时间】:2012-02-06 14:10:52
【问题描述】:

我有一个 @ViewScoped @ManagedBean 和一个 @RequestParam 来初始化我的 @PostConstruct 方法中的一些东西。

@ManagedBean @ViewScoped
public class MyBean implements Serializable
{
  @javax.inject.Inject
  @org.jboss.solder.servlet.http.RequestParam("id")
  private long id;

  @PostConstruct
  public void init() {...}

  ...
}

id 已正确注入 test.jsf?id=1357 之类的调用,但现在我想在我的 xhtml 页面中添加一些 p:ajax 内容。如果我删除@Inject @RequestParam(并在init() 中有硬编码的id),这工作正常,但如果我想使用这种注入,什么都不会发生,Firebug 会给我这个响应:

<partial-response><error>
  <error-name>class java.lang.IllegalStateException</error-name>
  <error-message><![CDATA[Can not set long field MyBean.id to null value]]></error-message>
</error></partial-response>

将类型更改为private Long id 会导致

<partial-response><error>
  <error-name>class java.lang.IllegalStateException</error-name>
  <error-message><![CDATA[]]></error-message>
</error></partial-response>

如何在@ViewScoped Bean 中使用@RequestParam

【问题讨论】:

  • 我不知道 Seam Solder 是什么以及它应该做什么,但您可以使用标准 JSF2 &lt;f:viewParam&gt; 标签实现相同的底层功能需求。
  • 感谢您的解决方法,目前我已删除 @Inject @RequestParam 并使用 &lt;f:viewParam&gt;

标签: java ajax jsf-2 deltaspike


【解决方案1】:

id 必须封装在 javax.enterprise.inject.Instance; 中才能与 Seams RequestParam 一起使用。

@javax.inject.Inject
@org.jboss.solder.servlet.http.RequestParam("id")
private Instance<Long> id;

(同时我从@ManagedBean @ViewScoped切换到@Named @ViewScoped,但我认为这与这个问题无关)

【讨论】:

    猜你喜欢
    • 2014-02-12
    • 2014-02-14
    • 2011-06-08
    • 2015-01-14
    • 2021-12-29
    • 1970-01-01
    • 2013-12-13
    • 2018-07-25
    • 2013-07-26
    相关资源
    最近更新 更多