Bean@ManagedBean
に置き換えたい作品があります。@Named + @RequestScoped
// Before
@ManagedBean
public class Login {
...
}
// After
import javax.enterprise.context.RequestScoped;
@Named
@RequestScoped
public class Login {
...
}
私が使用している限り、すべてが正常に機能します@ManagedBean
。@Named
動作しませ@RequestScoped
んが、EL式ごとに新しいインスタンスを作成します。@Named + @RequestScoped
ただし、例外が発生します。リクエストキャッシュがアクティブでない場合、リクエストスコープのキャッシュアイテムを追加できません。
java.lang.IllegalStateException: Unable to add request scoped cache item when request cache is not active
at org.jboss.weld.context.cache.RequestScopedBeanCache.addItem(RequestScopedBeanCache.java:51)
at de.prosis.dafe.presentation.Login$Proxy$_$$_WeldClientProxy.getUsername(Login$Proxy$_$$_WeldClientProxy.java)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:302)
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
at org.apache.el.parser.AstValue.getValue(AstValue.java:169)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50)
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
...
空beans.xml
は存在します。私が気付いていない落とし穴やバグはありますか?私は何かが足りないに違いないが、それはバグのように見える。例外メッセージをグーグルで検索しましたが、それを発生させるクラスのソース以外は見つかりませんでした。前もって感謝します!
更新: 省略したコードに関連しています。ログインBeanは、コンストラクターでセッションを無効にしようとします。これは、名前付きBeanの場合は失敗し(F5をスパムすると、数回後には機能するように見えます)、マネージドBeanとして機能します。誰かがその行動を説明できますか?
public Login() {
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
if (session != null) {
session.invalidate();
}
}
コードはそのチュートリアルからのものです: http ://www.greenkode.com/2011/09/user-authentication-and-authorization-using-jaas-and-servlet-3-0-login/