我会详细说明一下。 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进行了一些研究,虽然它现在对我没有帮助,但我肯定会记住下一个项目。
答案 0 :(得分:4)
它还支持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参数。