我试图创建一个页面,用户可以在其中选择要执行的方法并为其输入参数。
<form action="thisPage.jsp" method="post">
<h2>Select method to test:</h2>
<select name = 'methods' onchange='this.form.submit()'>
<custom:inputs selectedMethod="<%=request.getParameter(\"methods\")%>" />
<input type="submit" name="go" value="OK" />
</form>
<br /> Output:
<br />
<custom:hello arg="<%=request.getParameter(\"generatedInput\")%>" />
目前我有两个自定义标签。第一个标记输入动态创建输入供用户填充,具体取决于所选方法。第二个标记将这些输入的值作为参数并显示输出。
问题是提交表单时,两个标记都会运行。当用户更改当前选择的方法时,不应该调用负责输出的标记,或者至少它应该能够知道调用是由方法选择引起的,因此它可以返回而不执行。如何在不为每个方法创建单独的静态页面的情况下执行此操作?
答案 0 :(得分:1)
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
...
<c:if test="${not empty param.generatedInput}">
<custom:hello arg="${param.generatedInput}" />
</c:if>
因此,hello
标记的输出仅在generatedInput
param不为空且不为空字符串时才会包含在页面中。
答案 1 :(得分:0)
最后,我使用了AJAX,将负责生成输入的标签转换为servlet,并在不重新加载页面的情况下编写了一个从servlet请求的函数:
var generateInputs = function() {
$.get("inputGeneratorServlet", {
method : $('#methods').val()
}, function(responseText) {
$("#inputsDiv").html(responseText);
});
};
$(document).ready(generateInputs());
不是从标记生成输入,而是放置div
并使用调用generatorServlet的响应更新其下的DOM。
<h2>Select method to test:</h2>
<form action="thisPage.jsp" method="post">
<h2>Select method to test:</h2>
<select name = 'methods' onchange='generateInputs()'>
// the select above is actually part of the things the servlet generates
// under the div below, but I included it for clarity
<div id="inputsDiv"></div>
<input type="submit" name="go" value="OK" />
</form>
这样,更改所选方法不会提交表单,只有当用户按下OK按钮时才会提交表单,表示他已填写生成的输入。