Jsf 在servlet中访问FacesContext
我正在开发一个JSF(v1.2)应用程序。在我的应用程序中,我需要一个通用servlet,它可以服务于任何资源(PDF、图像、Excel等)。我的想法是让调用方发送所需的信息,这样我就可以使用一些配置找到正确的delegator类 这个delegator类将负责提供正确的资源 例如,这是请求urlJsf 在servlet中访问FacesContext,jsf,servlets,Jsf,Servlets,我正在开发一个JSF(v1.2)应用程序。在我的应用程序中,我需要一个通用servlet,它可以服务于任何资源(PDF、图像、Excel等)。我的想法是让调用方发送所需的信息,这样我就可以使用一些配置找到正确的delegator类 这个delegator类将负责提供正确的资源 例如,这是请求url http://example.com/servlet?delegatorid=abcd 我的Servlet代码是这样的 protected void doGet(HttpServletRequest
http://example.com/servlet?delegatorid=abcd
我的Servlet代码是这样的
protected void doGet(HttpServletRequest request, HttpServletResponse response){
String delegatorID=request.getParameter("delegatorid");
//Get the configuration from Configuration table
configuration=getConfiguration(delegatorID);
//invoke the method of the delegator class based on this configuration
Object result=invokeMethod(configuration);
//write the response to the stream
}
我的问题是在JSF项目中实现这一点的最佳方式是什么
您能告诉我您对此的想法吗?面部上下文(和
外部上下文
)只是一个简单的servlet请求、HttpServletResponse、HttpSession、ServletContext、ServletContext等等,以及一些在普通servlet中根本不需要的JSF细节
不过是HttpSession#get/setAttribute()
的抽象映射
在普通servlet中,会话仅通过request.getSession()
可用,应用程序通过getServletContext()
以通常的方式可用。另请参见此相关问题:
您还可以将需要由JSF和Servlet共享的代码重构为一个实用方法,该方法不依赖于javax.faces.*
或javax.Servlet.*
类(或者最多只依赖于javax.Servlet.
)最后让每个呼叫者传递必要的信息。感谢BalusC的回复。关于最后一点,您能为我提供一个示例吗?例如,如果有一个代码获取userInfoFromSession(),最好不要传递任何参数,而是从FacesContext(如果存在)或HttpServletRequest(使用ThreadLocal)获取会话信息?好吧,实用方法会被夸大。在JSF中,它只是sessionMap.get(“user”)
,而在servlet中,它只是Session.getAttribute(“user”)
。那些OneLiner不值得一个通用的助手方法。嗨,BalusC,从Threadlocal变量获取当前的HttpServletRequest和HttpServletResponse是一个好方法吗?我想会有一个名为getUserInfoFromSession()的通用方法,它将从会话中获取用户的信息。将使用FacesContext获取会话,如果它不存在,我假设它直接来自servlet,并尝试从ThreadLocal变量获取HttpServletRequest。您能建议吗?