nic*_*510 4 java jsf applet servlets managed-bean
我需要从servlet访问会话范围的bean.我已经试过了
UserBean userBean = (UserBean) request.getSession().getAttribute("userBean");
Run Code Online (Sandbox Code Playgroud)
如在此描述的职位.但是我只得到null作为结果,尽管UserBean的实例是alreay instatiated.这些是我用于userBean的注释/导入:
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class UserBean implements Serializable{
... }
Run Code Online (Sandbox Code Playgroud)
一些背景为什么我无法摆脱servlet:我的jsf页面中有一个文件上传小程序.这个小程序需要一个地址,它可以发送它的POST请求.(我无法编辑此帖子请求以添加更多字段或其他内容).然后我的servlet的post方法存储文件.托管bean无法完成此作业,因为必须使用@MultiPartConfig注释servlet,并且我无法将此批注添加到jsf托管bean.
如果它返回null
,那么它只能意味着两件事:
考虑到你描述功能需求的方式,我认为这是后者.您需要确保传递webapp的会话标识符以及来自applet的HTTP请求.这可以是JSESSIONID
cookie或jsessionid
URL路径属性的形式.
首先,您需要告诉applet有关webapp正在使用的会话ID.您可以通过将参数传递给<applet>
或<object>
标记小程序来实现
<param name="sessionId" value="#{session.id}" />
Run Code Online (Sandbox Code Playgroud)
(这#{session}
是一个隐含的JSF EL变量,引用当前的HttpSession
,当前又有一个getId()
方法;你不需要为那个左右创建一个托管bean,上面的代码行是按原样完成的)
可以在applet中检索,如下所示:
String sessionId = getParameter("sessionId");
Run Code Online (Sandbox Code Playgroud)
您没有描述如何与servlet交互,但假设您正在使用标准Java SEURLConnection
,指向@WebServlet("/servleturl")
servlet,那么您可以使用setRequestProperty()
设置请求标头:
URL servlet = new URL(getCodeBase(), "servleturl");
URLConnection connection = servlet.openConnection();
connection.setRequestProperty("Cookie", "JSESSIONID=" + sessionId);
// ...
Run Code Online (Sandbox Code Playgroud)
或者,您也可以将其作为URL路径属性传递:
URL servlet = new URL(getCodeBase(), "servleturl;jsessionid=" + sessionId);
URLConnection connection = servlet.openConnection();
// ...
Run Code Online (Sandbox Code Playgroud)
(请注意,这两种情况都很重要)
无论哪种方式,这种方式applet-servlet交互将发生在与JSF托管bean相同的HTTP会话中.
归档时间: |
|
查看次数: |
2792 次 |
最近记录: |