gpt4 book ai didi

java - 带有弹出窗口的jsf,具有相同viewid的问题

转载 作者:行者123 更新时间:2023-11-28 23:52:05 25 4
gpt4 key购买 nike

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

案例:我的应用程序有一个 jsp(我们将其命名为/create.jsp),其中包含一个用于创建业务对象(想象类型的人)的表单。此业务对象的属性之一是与其自身的关系(BO 人有一个属性 father,也是 person 类型)。对于这个 porpose,在 jsp 中,我有一个可选择的按钮。该按钮可以创建新的业务对象(在本例中为一个人)。因此,弹窗中显示的jsp与主窗口中显示的是一样的

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

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

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

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

有什么方法可以更改 View 的 ID?谁有解决办法?

谢谢

最佳答案

您可能想研究使用 subview 。您可以在其中分配一个 namespace ,这实际上会在页面中创建一个新的 namespace 。在 facelets 中:

<f:view id="main">
<ui:include "myOtherJsp.jsp" /> <!-- This containing a subview -->
</f:view>

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

<f:view id="mainpage">
<p>Page content</p>
</f:view>
<f:view id="popup">
<p>My Popup</p>
</f:view>

我不知道您的应用程序的具体细节,但我看不出存在不具有多个 View /表单的情况。我猜分离会解决你的问题。您可以在 View 之外使用 JSF 的某些元素(因此没有理由在每个页面上使用一个 View ,除非您被迫这样做。

警告:我大部分时间都是 JSF2 开发人员,而且我已经很长时间没有开发过 JSF1.1 应用程序了。

关于java - 带有弹出窗口的jsf,具有相同viewid的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7272686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com