1. Get ContextPath in JSF
In jsp/jsf/html file you can get contextpath using:
#{facesContext.externalContext.requestContextPath}
And in bean you can get context path using:
FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath()
NOTE :Most of the JSF components are fully aware of their context paths, so you don't need to explicitly include them. I know that the graphicImage tag is one of them. So you're actually being more clever than you need to be.
We can get remote address and port if you have HttpServletRequest object something like below:
((HttpServletRequest ) FacesContext.getCurrentInstance().getExternalContext().getRequest()).getRemoteAddr() ;
((HttpServletRequest ) FacesContext.getCurrentInstance().getExternalContext().getRequest()).getRemoteHost() ;
((HttpServletRequest ) FacesContext.getCurrentInstance().getExternalContext().getRequest()).getRemotePort();
2. URL 传递参数到 JSF 程序中
如果你有下面的URL: http://your_server/your_app/product.jsf?id=777, 你可以使用下面的代码来访问所传递的参数 :
FacesContext fc = FacesContext.getCurrentInstance(); |
在JSF 页面上 , 你也可以使用预定义的变量 param 访问同样的参数 , 例如 :
<h:outputText value="#{param ['id']}" />
3. Managed Bean 中调用另一个 Managed Bean
FacesContext facesContext = FacesContext.getCurrentInstance();
TestHandler ush = (TestHandler) facesContext.getApplication().getVariableResolver().resolveVariable(facesContext, "testHandler");
4. Maven开发使用jetty插件 部署JSF2.0的问题:
mvn jetty:run jetty中使用jetty测试JSF2.0存在问题: Managed Bean中@ManagedBean\@SessionScoped等注解不会生效——原因是没有扫描在/target/目录下的class文件导致(maven项目编译后的class等输出都在target目录中)。
如果使用mvn jetty:run-war 就不会有问题 !!! (不会自动更新部署新修改的代码)
有时间做个详细的描述......