我有@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
(并且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
Bean中使用@ViewScoped
?
答案 0 :(得分:0)
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
,但我认为这与此问题无关)