4

我会详细说明一下。从设计师的角度来看,使用 Jsf 有点痛苦,有点像是双手绑在背后尝试画图,但它对于咀嚼表格和列出大量数据很有用。所以我们在我公司制作的网站是 jsf 管理页面和 jsp 用户页面。当用户页面有一些复杂的表单和东西并且 jsf 开始启动时,就会出现问题。

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

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

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

4

5 回答 5

4

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

它还通过 jsfc 标记支持出色的设计时语义......

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

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

于 2008-09-04T11:46:29.847 回答
3

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

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

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

于 2008-09-16T13:33:47.460 回答
1

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

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

编辑:请参阅 Chris Hall 的回答,FacesContextFacesServlet.

于 2008-09-15T15:21:33.043 回答
0

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

于 2008-09-16T03:00:31.727 回答
0

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

于 2008-09-16T12:08:02.703 回答