提交表单时,有条件地仅调用页面上的某些自定义标记

时间:2015-11-19 12:16:35

标签: html jsp

我试图创建一个页面,用户可以在其中选择要执行的方法并为其输入参数。

<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\")%>" />

目前我有两个自定义标签。第一个标记输入动态创建输入供用户填充,具体取决于所选方法。第二个标记将这些输入的值作为参数并显示输出。

问题是提交表单时,两个标记都会运行。当用户更改当前选择的方法时,不应该调用负责输出的标记,或者至少它应该能够知道调用是由方法选择引起的,因此它可以返回而不执行。如何在不为每个方法创建单独的静态页面的情况下执行此操作?

2 个答案:

答案 0 :(得分:1)

尝试JSTL conditional tag

<%@ 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按钮时才会提交表单,表示他已填写生成的输入。