2008-09-03 92 views
4

我会详细说明一下。从设计师的角度来看,Jsf是一种非常痛苦的工作,有点在试图绘制图片而双手绑在背后的范围内,但它对咀嚼形式和列出大量数据很有好处。因此,我们在我公司制作的网站是jsf管理页面和jsp用户页面。问题发生在用户页面有一些复杂的形式和东西,jsf开始踢'英寸混合jsp和jsf

这里是问题:我在纯jsp页面。我需要访问一些使用会话bean的jsf页面。我怎样才能初始化那个bean?如果我在jsf页面上,我可以有一些准备数据的commandLink。我唯一能想出的就是有一个虚拟的jsf页面,它可以完成这项工作,并将我重定向到需要的jsf页面,但这很丑陋,而且我不想得到50个虚拟页面。我宁愿找到一些机制来重新初始化已经与某些想要的参数进行会话的bean。

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

编辑:我已经研究过小面,虽然它现在不能帮助我,但我一定会记住下一个项目。

回答

1

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

该解决方案可能会有点脆弱,这取决于您的环境。

编辑:请参阅Chris Hall的答案,FacesContext在FacesServlet外部不可用。

4

你看过使用facelets吗?它可以让你摆脱整个JSF/JSP的差异(这是一个备用和优秀的视图控制器)。

它还支持与JSFC标签伟大的设计时语义...

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

被内部转换为正确的JSF的东西,这样你就可以与您现有的工具的工作。

0

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

0

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

3

可以使用这样的一个标签库的检索内部管理bean:

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

但是,你需要从你的JSF页面的一个使用标签库。 FacesContext.getCurrentInstance()在FacesServlet之外调用时返回null。