2012-02-06 6 views
0

У меня есть @ViewScoped@ManagedBean с @RequestParam инициализировать некоторые вещи в моем @PostConstruct методе.SEAM пайка @RequestParam в @ViewScoped Bean с AJAX

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

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

    ... 
} 

идентификатора правильно вводят вызовы типа test.jsf?id=1357, но теперь я хочу, чтобы добавить некоторые p:ajax вещей в моей странице Xhtml. Это прекрасно работает, если я удалю @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> 

Как я могу использовать @RequestParam в @ViewScoped Bean?

+0

Я понятия не имею, что Seam пайку и что он должен делать, но вы можете достичь того же базового функционального требования со стандартным тегом JSF2 ''. – BalusC

+0

Спасибо за этот обходной путь, в настоящее время я удалил '@Inject @ RequestParam' и использовал' '. – Thor

ответ

0

id должен быть заключен в javax.enterprise.inject.Instance; для использования с швами RequestParam.

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

(В то же время я перешел от @ManagedBean @ViewScoped к @Named @ViewScoped, но я думаю, что это не имеет отношения к этому вопросу)

Смежные вопросы