使用AJAX在@ViewScoped Bean中搜索Solder @RequestParam

时间:2012-02-06 14:10:52

标签: java ajax jsf-2 seam-solder

我有@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

1 个答案:

答案 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,但我认为这与此问题无关)