java faces导包_java – 手动生成Faces上下文

在这种情况下,我不确定你所说的“网站”是什么意思.

几个笔记:

>托管bean永远不会在定义它们的Web应用程序(WAR)之外可用.

> FacesContext对象实例最终由FacesServlet.service创建和处理,因此请求应该通过此servlet.尝试在其他情况下创建上下文可能会导致未定义的行为.

记住这一点,你可以创建一个这样的请求序列:

FacesServlet (mapping: /faces/*)

-> /faces/jsfPage.jsp (a JSP with JSF controls)

-> DispatchBean (calls ExternalContext.dispatch("/AnotherServlet")

-> AnotherServlet

jsfPage.jsp包含:

“dispatch”属性解析为bean方法“getDispatch”:

public String getDispatch() {

FacesContext context = FacesContext.getCurrentInstance();

try {

context.getExternalContext().dispatch("/FacesClientServlet");

} catch (IOException e) {

throw new FacesException(e);

}

return null;

}

哪个调度到这个servlet:

public class FacesClientServlet extends javax.servlet.http.HttpServlet

implements javax.servlet.Servlet {

static final long serialVersionUID = 1L;

@Override

protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {

FacesContext context = FacesContext.getCurrentInstance();

ELContext elContext = context.getELContext();

ExpressionFactory expressionFactory = context.getApplication()

.getExpressionFactory();

ValueExpression expression = expressionFactory.createValueExpression(

elContext,"#{myBean.text}",Object.class);

Object value = expression.getValue(elContext);

ResponseWriter writer = context.getResponseWriter();

writer.write("" + value);

}

}

它从托管bean“myBean”中发出值:

public class MyBean {

private final String text = "Hello,World!";

public String getText() {

return text;

}

}

这一切都非常复杂,我不愿意做任何事情.

另一种可能带来其后果的替代方法是创建自己的上下文,如下所示:

public class ContextServlet extends javax.servlet.http.HttpServlet implements

javax.servlet.Servlet {

static final long serialVersionUID = 1L;

private FacesContextFactory facesContextFactory;

private Lifecycle lifecycle;

@Override

public void init(ServletConfig config) throws ServletException {

super.init(config);

LifecycleFactory lifecycleFactory = (LifecycleFactory) FactoryFinder

.getFactory(FactoryFinder.LIFECYCLE_FACTORY);

facesContextFactory = (FacesContextFactory) FactoryFinder

.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);

lifecycle = lifecycleFactory

.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);

}

@Override

protected void doGet(HttpServletRequest request,IOException {

FacesContext context = facesContextFactory.getFacesContext(

getServletContext(),request,response,lifecycle);

try {

ELContext elContext = context.getELContext();

ExpressionFactory expressionFactory = context.getApplication()

.getExpressionFactory();

ValueExpression expression = expressionFactory

.createValueExpression(elContext,Object.class);

Object value = expression.getValue(elContext);

PrintWriter pw = response.getWriter();

try {

pw.write("" + value);

} finally {

pw.close();

}

} finally {

context.release();

}

}

}

如果可能的话,我会再次避免使用这种方法.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值