我有一个允许用户进行搜索的应用程序。
根据输入的搜索条件,对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)可能不可行。
答案 0 :(得分:0)
以下是<usebean>
:
<jsp:useBean id=”connection” class=”com.myco.myapp.Connection” />
。在此示例中,具有id的bean可通过在会话中创建或查找现有的<jsp:useBean id=”connection” class=”com.myco.myapp.Connection”>
<jsp:setProperty name=”connection” property=”timeout” value=”33”>
</jsp:useBean>
。在此示例中,将创建或找到bean,并在创建时使用setProperty
进行实例化。<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");
}
%>