是否可以在JSP中使用usebean?

时间:2011-11-09 01:17:03

标签: spring jsp session usebean

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

根据输入的搜索条件,对DAO功能进行服务调用(模式jsp事件 - >拦截器 - >处理器 - > services - > 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)可能不可行。

2 个答案:

答案 0 :(得分:0)

以下是<usebean>

的用法
  1. <jsp:useBean id=”connection” class=”com.myco.myapp.Connection” />。在此示例中,具有id的bean可通过在会话中创建或查找现有的
  2. 来使用
  3. <jsp:useBean id=”connection” class=”com.myco.myapp.Connection”> <jsp:setProperty name=”connection” property=”timeout” value=”33”> </jsp:useBean>。在此示例中,将创建或找到bean,并在创建时使用setProperty进行实例化。
  4. <jsp:useBean id=”wombat” type=”my.WombatType” scope=”session”/>。在此示例中,找到现有bean并使其具有给定类型。

答案 1 :(得分: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");
  }
%>