混合jsp和jsf

时间:2008-09-03 23:27:57

标签: java jsp jsf

我会详细说明一下。 Jsf对于从设计师的角度来看是非常痛苦的,有点在尝试绘制图片的同时将双手绑在你的背上,但它有利于咀嚼表单和列出大量数据。所以我们公司制作的网站是jsf管理页面和jsp用户页面。当用户页面有一些复杂的形式和内容并且jsf开始启动时会出现问题。

这是一个问题:我在纯jsp页面上。我需要访问一些使用会话bean的jsf页面。我该如何初始化那个bean?如果我在jsf页面上,我可以使用一些准备数据的commandLink。我唯一想到的就是使用虚拟jsf页面来完成工作并将我重定向到需要的jsf页面,但这有点难看,而且我不想最终得到50个虚拟页面。我宁愿找到一些机制来重新初始化已经在会话中的bean以及一些想要的参数。

编辑:更多细节。在这种特定情况下,我有一个完整或过滤的测试。这是一个具有相同逻辑和所有内容的相同测试,除非测试被过滤,它应根据答案消除一些问题。单击链接后,它应以两种模式之一启动请求的测试。链接是主菜单树的一部分,在许多同级jsp页面上都可见。我的任务是有4个链接:testA full,testA过滤,testB full,testB过滤,所有jsf页面和TestFormBean都应该相应地重新初始化。

编辑:我对facelets进行了一些研究,虽然它现在对我没有帮助,但我肯定会记住下一个项目。

5 个答案:

答案 0 :(得分:4)

你打算用facelets吗?它可以让你摆脱整个JSF / JSP差异(它是一个替代和优秀的视图控制器)。

它还支持jsfc标签的优秀设计时语义......

<input type="text" jsfc="#{SomeBean.property}" class="foo" />

内部翻译为正确的JSF内容,因此您可以使用现有工具。

答案 1 :(得分:3)

您可以使用以下内容检索标记库中的托管bean:

FacesContext context = FacesContext.getCurrentInstance();
Object myBean = context.getELContext().getELResolver().getValue(context.getELContext(), null, "myBeanName");

但是,您需要使用其中一个JSF页面中的标记库。 FacesContext.getCurrentInstance()在FacesServlet外部调用时返回null。

答案 2 :(得分:1)

要解决这个问题,我可能会创建一个仅包含表单的JSF片段,然后使用<c:import>标记将其包含在我的JSF页面中。

根据您的环境,该解决方案可能有点脆弱。

编辑:请参阅Chris Hall的回答,FacesContext之外无法使用FacesServlet

答案 3 :(得分:0)

创建自定义JSP标记处理程序。然后,您可以从会话范围中检索bean,然后即时初始化它。有关详细信息,请参阅此tutorial

答案 4 :(得分:0)

实际上,我已经通过从会话中删除bean来解决这个问题,因此必须在调用jsf页面时再次生成它。然后我从构造函数中的请求中获取get参数。