サーブレットで ViewScoped ManagedBean にアクセスする方法を知っている人はいますか?
たとえば、次のようにして SessionScoped ManagedBean にアクセスできます。
MyBean bean = (MyBean) request.getSession().getAttribute("myBean");
しかし、スコープを ViewScoped に設定すると、null が返されます。その理由は、サーブレットが Bean に早期にアクセスしようとするためであることはわかっています。しかし、どうすればこれを修正できますか?
バッキング Bean:
@ManagedBean(name = "statistikHandler")
@SessionScoped //or ViewScoped
public class StatistikHandler {
private Object someAttribute
//Do something nice here
//getter and setter
}
サーブレット:
public class ImageStreamServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("+++++ CALL THE IMAGESERVLET +++++");
//try to "inject" the Bean here
StatistikHandler handler = (StatistikHandler) request.getSession().getAttribute("statistikHandler");
try {
if (handler != null) {
//Do something with the ManagedBean
} else {
System.out.println("HANDLER NOT FOUND");
}
} finally {
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
}
それでおしまい。StatistikHandler を SessionScope に設定すると、正常に動作します。Handler を ViewScoped に設定すると、機能しません。
最初:あなたのawserのTHX。
アルジャン・ティムス:
2 つ目は、ビュー スコープは、処理中のビューがある場合にのみ存在するということです。それは薄い空気から抜け出すことはできません。
それは理にかなっており、私はそれを知っています。私は流れを説明しようとします、そしてあなたが私を理解することを願っています. 私の英語は最高ではありませんが、十分だと思います。それでは試してみましょう:
ビューにリクエストを設定し、ビュー スコープ Bean のインスタンスを設定しました。したがって、ビューと Bean は存在しますが、サーブレットは必要ありません。
ここで、ビューを操作して、別の部分をレンダリングする必要があります。この部分にはサーブレットが必要なので、サーブレットへのリクエストを設定します。
したがって、ビューと Bean はインスタンスとして存在し、(部分的なリロード後) サーブレットを要求します。
アルジャン・ティムス:
サーブレットが参照を見つけて取得できるリクエストスコープに参照を格納するコードが必要です。
私見は重要な部分です。あなたが言うように、ビュースコープのBeanをセッション属性として取得することはできません。私は以前にそれを知らなかったので、この事実を非常に感謝しています。
これで解決策を考えることができます。
感謝と敬意