0

我有一个允许用户进行搜索的应用程序。

根据输入的搜索条件,对 DAO 函数进行服务调用(模式 jsp 事件 -> 拦截器 -> 处理器 -> 服务 -> DAO -> 数据库)并返回结果列表,该列表显示在 myView.jsp

下面的代码用于读取 JSP 中的 TO 数据:

<jsp:usebean id="myTO" type="com.myPackage.MyTO" scope="session"/>

在身体里有类似的东西

<%= myTo.getSomething() =%>

列表中的每个项目都可以单击以获取详细信息。因此,在单击列表中的第 2 项时,将使用第 2 项的 id 进行另一个调用,以获取有关第 2 项的更多详细信息。

根据项目的类型,在不同的 TO 中获取详细信息。例如 Type1TO、Type2TO。

因此,在这样一个 TO 中返回了有关项目的详细数据。

问题是:我在同一个 JSP 中显示详细信息。所以第二个请求的 returnURL 被转发到 myView.JSP

所以我放了一条线

<jsp:usebean id="type1TO" type="com.myPackage.Type1TO" scope="session"/>

但是,当上述 Type1TO 尚不存在时,这在第一次调用列表搜索期间会出错。错误类似于“无法在范围会话中找到 type1TO”

我怎么能解决这个问题???

有没有办法将 jsp:usebean 标记放在 if 条件中,放在要在正文中使用的地方?或任何其他解决方案?

我是 JSP 新手并处理旧版 JSP。所以非常高级的 JSP(复杂的 EL)可能不可行。

4

2 回答 2

0

以下是 的用法<usebean>

  1. <jsp:useBean id=”connection” class=”com.myco.myapp.Connection” />. 在此示例中,通过在会话中创建或查找现有的 id 可以使用具有 id 的 bean
  2. <jsp:useBean id=”connection” class=”com.myco.myapp.Connection”&gt; <jsp:setProperty name=”connection” property=”timeout” value=”33”&gt; </jsp:useBean>. 在这个例子中,bean 被创建或找到,并用setPropertyif 来实例化它正在被创建。
  3. <jsp:useBean id=”wombat” type=”my.WombatType” scope=”session”/>. 在这个例子中,现有的 bean 被找到并且可以使用给定的类型。
于 2011-11-09T05:51:59.513 回答
0

如果翻译成 Servlet,您的第一个代码片段将如下所示:

getAttribute("myTO");

是使用单个属性还是“使用 if-else 逻辑的多个属性”取决于您的具体情况。在不了解您的具体情况的情况下,我可以看到以下选项:

选项 1 无论您在何处设置 myTO 属性,请确保将值设置为相同的变量,这样您就不必在 jsp 中使用 if-else 逻辑。

选项 2 使用脚本

<%
  com.myPackage.MyTO toObject = session.getAttribute("myTo");
  if (toObject == NULL) {
      toObject = session.getAttrbute("type1TO");
  }
%>
于 2011-11-09T08:50:25.430 回答