0

我有一个@ViewScoped @ManagedBean用 a@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但现在我想p:ajax在我的 xhtml 页面中添加一些东西。如果我删除@Inject @RequestParam(并在 中硬编码id)这​​工作正常init(),但如果我想使用这个注入没有任何反应,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>

如何@RequestParam@ViewScopedBean 中使用?

4

1 回答 1

0

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

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

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

于 2012-04-25T08:47:53.967 回答