我正在构建一个Java EE应用程序(仍在学习),我不知道如何简单地将一个按钮与一个按照良好实践的功能相关联。
我正在使用MVC设计,应用程序搜索ldap(AD)并返回属于组成员的用户。
我使用GET表单将用户名发送到我的servlet,然后将其发送到表单进行搜索,然后将信息返回给我的vue。 (我选择GET而不是POST,因为有些用户喜欢直接在URL中填写?userName =。
我创建了一个将结果导出到excel文件的函数,我想将一个按钮与该函数相关联。据我所知,到目前为止我所做的是:
JSP:
<!-- Send the userName input to the servlet to perform the search-->
<form method="get" action="<c:url value="/GroupVerification"/>">
<table>
<tr>
<td><label for="userCip">Search by CIP : </label></td>
<td><input type="text" id="userCip" name="userCip" /></td>
<td><input type="submit" value="Search" /></td>
</tr>
</table>
</form>
...<!-- html code for displaying results -->
<!-- Button to create Excel file with results-->
<form method="post" action="<c:url value="/GroupVerification"/>">
<input type="submit" name="excelExport" value="Export in Excel" />
</form>
Servlet:
public void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
if (request.getParameter("excelExport") != null) {
GroupVerificationForm.excelExport(user.getGroupList());
}
this.getServletContext().getRequestDispatcher( VUE ).forward( request, response );
public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
...
<!-- Code to send the userName to the form to perform search and setAttributes -->
this.getServletContext().getRequestDispatcher( VUE ).forward( request, response );
我不确定这是不好的做法,但用户是我的servlet中的私有全局变量,当进行搜索时,该变量与doGet()方法中的User关联...
无论如何,当我点击“导出到excel”按钮时,会调用doPost()并将我的结果导出到excel,但是,由于URL不再包含?userName = foo,我的搜索会消失。我的问题是我希望保持同一页面。有没有办法只使用按钮调用方法而不调用doPost所以我不会丢失我的URL?或者我应该在doPost中复制doGet代码,以便重新进行搜索并重新显示?
答案 0 :(得分:2)
如何在调用Java方法的JSP文件中创建按钮
使用ajax。另请参阅How to use Servlets and Ajax?
但是,我的搜索消失了,因为网址不再包含?userName = foo
只需将表单提交到所需的网址即可。
<c:url value="/GroupVerification" var="groupVerificationURL">
<c:param name="userName" value="${param.userName}" />
</c:url>
...
<form method="post" action="${groupVerificationURL}">