【问题标题】:Is it possible to use usebean on conditions in JSP?是否可以在 JSP 中的条件下使用 usebean?
【发布时间】:2011-11-09 16:50:25
【问题描述】:

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

根据输入的搜索条件,对 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)可能不可行。

【问题讨论】:

  • 我的理解是useBean标签会在指定范围内创建bean,如果它不存在的话。
  • 这有什么前置要求吗?还是我的声明方式不对??
  • 我不知道。我可能记错了。
  • 好的。假设 JSP 在第一次调用中自行创建实例。当我在第二次调用期间在上下文中设置实例时,它会被覆盖吗???我可以访问数据吗?
  • 它只创建不存在的对象。或者至少我认为这是它应该做的。

标签: spring jsp session usebean


【解决方案1】:

以下是&lt;usebean&gt;的用法:

  1. &lt;jsp:useBean id=”connection” class=”com.myco.myapp.Connection” /&gt; 。在此示例中,通过在会话中创建或查找现有的 id 可以使用具有 id 的 bean
  2. <jsp:useBean id=”connection” class=”com.myco.myapp.Connection”> <jsp:setProperty name=”connection” property=”timeout” value=”33”> </jsp:useBean>。在此示例中,创建或找到了 bean,如果正在创建,则使用 setProperty 进行实例化。
  3. &lt;jsp:useBean id=”wombat” type=”my.WombatType” scope=”session”/&gt;。在这个例子中,现有的 bean 被找到并可以使用给定的类型。

【讨论】:

    【解决方案2】:

    如果翻译成 Servlet,您的第一个代码 sn-p 将如下所示:

    getAttribute("myTO");
    

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

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

    选项 2 使用脚本

    <%
      com.myPackage.MyTO toObject = session.getAttribute("myTo");
      if (toObject == NULL) {
          toObject = session.getAttrbute("type1TO");
      }
    %>
    

    【讨论】:

      猜你喜欢
      • 2014-06-09
      • 1970-01-01
      • 2021-09-02
      • 2012-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多