首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有弹出窗口的jsf,具有相同视图jsf的问题

问具有弹出窗口的jsf,具有相同视图jsf的问题
EN

Stack Overflow用户
提问于 2011-09-01 23:33:56
回答 2查看 780关注 0票数 0

我有一个带有jsf 1.1的tomcat应用程序

案例:我的应用程序有一个jsp (让它命名为/create.jsp),其中包含一个用于创建业务对象(假设类型为person)的表单。此业务对象的属性之一是与其自身的关系( BO person有一个属性person,该属性也属于person类型)。对于这个图像,在jsp中,我有一个可选择的和一个按钮。使用该按钮可以创建新的业务对象(在本例中为person)。因此,弹出窗口中显示的jsp与主窗口中显示的jsp相同。

问题:我在主窗口中遇到了错误的行为。

原因:我研究过这个案例,问题的原因是存储在服务器中的视图的ids。当用户需要新页面时,服务器会创建一个视图(ViewRoot)并将其存储在会话中。jsp路径用作视图的id。当用户提交表单时,它将重新使用存储在会话中的相同视图。在我的例子中,问题是弹出窗口ViewRoot和主窗口ViewRoot共享相同的id。因此,当显示主窗口时,它的viewRoot将被存储(假设id为/create.jsp),但是,当弹出窗口显示时,它的viewRoot将覆盖会话中的主窗口。关闭弹出窗口后,用户将尝试提交主页,但在服务器中没有这样的ViewRoot。

可能的解决方案:我一直在考虑更改jsf的创建,但我认为这是不可行的(至少如果我不修改ViewRoot库的话)。

-旧文本-我有一个带有表单(让它命名为/create.jsp)的jsp,它可以打开一个弹出窗口。此弹出窗口也将使用/create.jsp。由于JSF view-id由jsp路径形成,因此两个页面将共享相同的id。因此,当弹出窗口显示时,主页面的会话中存储的视图将被新的视图覆盖。因此,应用程序无法正常工作。

有什么方法可以更改视图的ids吗?有人有什么解决方案吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-09 17:12:04

我的最终解决方案如下:

  1. 创建一个名为popup_create.jsp的jsp,该jsp只包含对facesconfig中的create.jsp
  2. Duplicate create.jsp条目的包含(在配置中添加它),扩展名为ViewHandlerImpl,其中createView和restoreView方法被改写,以便viewId (如果是create.jsp,我们在弹出窗口中)将viewId修改为jsp

因为我认为这可能会以一种更优雅的方式完成,这是我找到的唯一方法。

票数 0
EN

Stack Overflow用户

发布于 2011-09-01 23:43:30

您可能想研究一下使用子视图。您可以在其中分配一个名称空间,该名称空间实际上将在页面中创建一个新的名称空间。在facelets中,这将是:

代码语言:javascript
复制
<f:view id="main">
  <ui:include "myOtherJsp.jsp" /> <!-- This containing a subview -->
</f:view>

或者,我认为您可能只需要将页面分成多个视图:

代码语言:javascript
复制
<f:view id="mainpage">
  <p>Page content</p>
</f:view>
<f:view id="popup">
  <p>My Popup</p>
</f:view>

我不知道您的应用程序的细节,但我看不出有理由不使用多个视图/表单的情况。我猜分居会解决你的问题。您可以在视图之外使用JSF的一些元素(因此,除非迫不得已,否则没有理由在每个页面上使用单个视图。

注意:我大部分时间都是一名JSF2开发人员,我已经很久没有开发过JSF1.1应用程序了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7272686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档