Object
fromをJSFのServlet
アクションメソッドに渡そうとしています。しかし、私はそれをすることができません。doPost()
Managed bean
次のように値を設定しようとしServlet
ました:
request.getSession().setAttribute(key, "JYM");
そして、次のようにフォームを取得しようとしManaged bean
ました:
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(key)
帰ってきnull
ました。
また、これも戻っnull
てきていManaged bean
ます:
((HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getSession().getAttribute(key);
また、Managed bean
これから戻ってきていnull
ます:
((HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false)).getAttribute(key)
私は次のようにキーを渡します:
'${pageContext.request.contextPath}/uploadservlet;jsessionid=${pageContext.session.id}?key=<h:outputText value="#{uploadBean.key}" />'
uploadBean
はの名前でManaged bean
あり、key
は次のように生成されます。
key = UUID.randomUUID().toString();
key
サーブレットとマネージドBeanの両方で変更されません。私が印刷したのは確認することです。
Object
fromServlet
をtoに渡すにはどうすればよいAction
ですか?任意のポインタが非常に役立ちます。
アップデート
はManaged bean
セッションスコープ内にあります。
アップデート
を使用することによりServletContext
、値を渡すことができます。
これが私がしたことです:サーブレットで:
String key = request.getParameter("key");
if (getServletContext().getAttribute(key) == null) {
List<FileItem> fileFields = new ArrayList<FileItem>();
fileFields.add(fileField);
getServletContext().setAttribute(key, fileFields);
} else {
List<FileItem> fileFields = (List<FileItem>)getServletContext().getAttribute(key);
fileFields.add(fileField);
}
そして、セッションスコープのBeanから:
ServletContext servletContext = ((ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext());
List<FileItem> fileFields = (List<FileItem>)servletContext.getAttribute(key);
servletContext.setAttribute(key, null);
これで、fileFields
はnullではなくなりました。私が理解しているのは、ServletContext
アプリケーションスコープ変数のように動作することです。
アップデート
HttpSessionListener
の実装:
これは私が書いたクラスです:
public class UploadListener implements HttpSessionListener {
private HttpSession session = null;
public void sessionCreated(HttpSessionEvent event) {
session = event.getSession();
session.setMaxInactiveInterval(10);
}
public void sessionDestroyed(HttpSessionEvent event) {
session = event.getSession();
Set<String> keys = (Set<String>) session.getAttribute("key");
Map<String, Object> data = (Map<String, Object>) session.getServletContext().getAttribute("key");
data.keySet().removeAll(keys);
}
}
私は次のように値を設定していますServletContext
:
String key = request.getParameter("key");
List<FileItem> fileFields = (List<FileItem>)getServletContext().getAttribute(key);
if (fileFields == null) {
fileFields = new ArrayList<FileItem>();
getServletContext().setAttribute(key, fileFields);
}
fileFields.add(fileField);
そして、これが私がサーブレットと呼んでいる方法です'${pageContext.request.contextPath}/uploadservlet?key=<h:outputText value="#{uploadBean.key}" />'
。