【问题标题】:JSP : Hidden field is not getting submittedJSP:隐藏字段未提交
【发布时间】:2013-05-17 03:27:59
【问题描述】:

我在 JSP 文件中使用以下代码,但我看到隐藏字段的值没有被提交

<form action="/processor/RequestActivityByCsv" method="post" enctype="multipart/form-data">
<div class="inputDiv">
   <h5>comma delimited file: <input type="file" name="file"/></h5>
   <input name="csrfToken" type="hidden" value="<%=CryptoUtils.generateCsrfToken()%>" />
   <input type="submit" value="upload" class="btn btn-primary"/>
</div>
</form>

在页面源代码中是这样的:

<form action="/processor/RequestActivityByCsv" method="post" enctype="multipart/form-data">
      <div class="inputDiv">
         <h5>comma delimited file: <input type="file" name="file"/></h5>
         <input name="csrfToken" type="hidden" value="t5ipRVFNIP83IUh5NCf7PiTp4mM2kBFVdHjqwlGx7PI=" />
         <input type="submit" value="upload" class="btn btn-primary"/>
      </div>
 </form>

我可能会在这里遗漏什么明显的东西?

【问题讨论】:

  • 你的get参数码是什么?
  • 在java中做req.getParameter()给出null
  • 我想问题出在enctype="multipart/form-data",因为只有文件被提交,没有其他字段被提交。有什么想法吗?
  • 尝试发布的答案。

标签: jsp forms


【解决方案1】:

您可以使用

获取隐藏字段以及所有其他字段值
String value = request.getParameter("fieldname").toString();

在您的情况下,获取字段 na 的隐藏值

String csrfToken= request.getParameter("csrfToken").toString();

更新 2

index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <form action="test.jsp" method="get">
        <input type="hidden" name="csrfToken" id="csrfToken"  value="t5ipRVFNIP83IUh5NCf7PiTp4mM2kBFVdHjqwlGx7PI=" />
        <input type="submit" value="sumbit"/>
        </form>
    </body>
</html>

test.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <%
        String csrfToken= (String)request.getParameter("csrfToken");
        out.print(csrfToken);
        %>
    </body>
</html>

输出

t5ipRVFNIP83IUh5NCf7PiTp4mM2kBFVdHjqwlGx7PI=

【讨论】:

  • 这只会给出 NullPointerException,因为 req.getParameter("csrfToken") 给出的是 null
【解决方案2】:

是的,我以前遇到过这个问题。

试试这个:-

<form name="frmfileupload" action="/processor/RequestActivityByCsv" method="post" enctype="multipart/form-data">
<div class="inputDiv">
   <h5>comma delimited file: <input type="file" name="file"/></h5>
   <input name="csrfToken" type="hidden" value="<%=CryptoUtils.generateCsrfToken()%>" />
   <input type="button" value="upload" onclick="funSubmit()" class="btn btn-primary"/>
</div>
</form>

使用Java脚本提交表单:-

<script >
 function funSubmit(){

    //You can do javascript validation here 
    var val=document.frmfileupload.csrToken.value;
    document.frmfileupload.action="<%=request.getContextPath()%>/processor/RequestActivityByCsv?csrToken="+val;
    document.frmfileupload.submit();

}

</script>

在上面的 java 脚本中,我使用 URL 发送令牌值。

希望对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 2019-07-29
    相关资源
    最近更新 更多