使用带有自定义Servlet和Struts2的通用JSP



(哎哟…对不起我的英语:)

在我的web应用程序中,Struts2被用作Servlet的主要调度器和过滤器。但由于某些原因,我有一个自定义过滤器和一个用于特定url">/book"的自定义servlet。

但我有一些公共jsp。。。由于struts标记(以前实现过),当自定义Servlet应该在JSP中显示我的请求属性时,我遇到了一些问题。所以我用jstl标签库更改了这些标签,现在就可以工作了。

但是。。。在一个JSP中,主(lol)。。。我有一个搜索表单。这个JSP包含在几个JSP中,Struts和自定义Servlet可以调用它

只有Struts的标签是"><s:form>..",当表单提交时,所有发送的值都保留在输入中。。。但现在,由于自定义Servlet,我使用了一个简单的html表单,它调用struts操作">search.do"。

源代码如下:

<form method="post" action="<c:out value="${contextPath}"/>/search.do" name="search" id="search">
<input type="text" id="search_searchWord" value="" maxlength="200" size="100" name="searchWord">
<div align="right">
<input type="submit" value="Ok" name="searchButton" id="search">
</div>
<select id="search_searchCrit" name="searchCrit">
<option value="0">Crit1</option>
<option value="1">Crit2</option>
<option value="2">Crit3</option>
</select>
</form>

我的问题是提交后会刷新搜索词和所选选项。我需要保留它们

有没有一种方法可以将struts标记库与标准Servlet一起使用?

或者,您是否有其他解决方案来保留提交的信息?

谢谢大家!

从输入字段中获取每个字段值,并编写js函数来填充页面的jsp源代码中的每个字段。

function selectedValue(){  
var value =<%=request.getParameter("searchCrit")%>;  
if(value !=null)  
{
document.getElementById('search_searchCrit').innerHTML=value;          
}    
} 

我在@java_seeker的帮助下找到了一个解决方案。

在Struts操作中,我通过以下方式获得请求:

HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("searchWord", this.getSearchWord());

有两种不同的方法,请参阅:http://www.mkyong.com/struts2/how-to-get-the-httpservletrequest-in-struts-2/

在每个可以刷新页面的方法(在操作中)中都设置了该属性。

然后,我刚刚恢复并将请求中的属性设置为带有jstl标记的变量,并将其显示为我的html输入值:

<c:set var="searchWord" value='<%=request.getAttribute("searchWord") %>' />
<input type="text" id="search_searchWor" value='<c:out value="${searchWord}" />' name="searchWord">

对于,我只是使用了一个<c:choose><c:when test=""></c:when><c:otherwise><c:otherwise></c:choose>来设置所选的选项。

现在总是显示所有值。也许这不是在标准servlet和Struts操作之间显示共享同一JSP的好方法,但它是有效的。如果你有更好的解决方案,我愿意尝试!谢谢大家!

最新更新