java - Spring MVC - 将值从 jsp 传递到 Controller - HTTP 状态 400 - 客户端发送的请求在语法上不正确

标签 java spring jsp spring-mvc csv

如果您能帮助我解决这个问题,我将接受最佳答案并对其余正确答案进行投票。

我已经尝试解决这个问题很长时间了,但我没有运气。

当我点击“添加当前问题”按钮时,出现一个 HTTP 状态 400 的页面,显示“客户端发送的请求在语法上不正确。”

我想做的是将一个值通过jsp中的表单传递给 Controller ​​, Controller 将处理该值并将其写入CSV文件,并从CSV文件中获取所有数据并将其显示在网页。

我有添加和删除按钮来添加或删除 CSV 文件中的数据。删除功能可以正常使用,但添加功能却不能正常工作。

下面是我的代码:

Controller :

@RequestMapping(value = "/c_Outage", method = RequestMethod.POST)
    public String deleteCurrentInputPage(@RequestParam String CurrentDelete_InputPage, @RequestParam(value="DeleteOn", required = false) String DeleteOn, String date, String type, String system, String description, String commit, Locale locale, HttpServletRequest req, Model model) throws Exception{

        String currentString = "";
        String csvFilename1 = "C:/temp/csv/curdata.csv";
        String eachdatarow = "";

        int entry = 0;
        logger.info("This is commit " + commit, locale);        
        logger.info("DeleteOn is " + DeleteOn, locale);
        logger.info("This is CurrentDelete_InputPage" + CurrentDelete_InputPage, locale);
        if (commit == null ){
            commit = "";
        }
        if (DeleteOn == null){
            DeleteOn = "";
        }

        //logger.info("This is CurrentDelete_InputPage" + CurrentDelete_InputPage, locale);
        /////////////////////////////// Writing Input Begin ///////////////////////////////////////////////
        if(commit.equals("Add Current Issue")){
            logger.info("DeleteOn inside if statement is " + DeleteOn, locale);

        CSVWriter writer1 = new CSVWriter(new FileWriter(csvFilename1, true));

        String [] record1 = {date,type,system,description};

        writer1.writeNext(record1);         

        writer1.close();

        }       else{}

/////////////////////////////// Writing Input End ///////////////////////////////////////////////
        if(DeleteOn.equals("DeleteOn")){
            ArrayList<String> INPUTTOCSV = new ArrayList<String>();
            CSVReader reader1 = new CSVReader(new FileReader(csvFilename1));
            String [] CurnextLineD;
            while ((CurnextLineD = reader1.readNext()) != null) {
                eachdatarow = CurnextLineD[0] + " " + CurnextLineD[1] + " " + CurnextLineD[2] + " " + CurnextLineD[3] ;
                eachdatarow = eachdatarow.replaceAll("\\s+","");
                CurrentDelete_InputPage = CurrentDelete_InputPage.replaceAll("\\s+", "");           
                //logger.info("This is eachdatarow " + eachdatarow, locale);
                //logger.info("This is CurrentDelete_InputPage " + CurrentDelete_InputPage, locale);
                if(eachdatarow.equals(CurrentDelete_InputPage)){
                    //logger.info("Success eachdatarow equals CurrentDelete", locale);
                    continue;
                }           
                    INPUTTOCSV.add(CurnextLineD[0]);
                    INPUTTOCSV.add(CurnextLineD[1]);
                    INPUTTOCSV.add(CurnextLineD[2]);
                    INPUTTOCSV.add(CurnextLineD[3]);

                    entry++;                    
            }
            reader1.close();
            //logger.info("This is entry " + entry , locale);
            //logger.info("This is INPUTTOCSV " + INPUTTOCSV, locale);

            int entrytimes4 = entry * 4;
            if ( entrytimes4 == 0){
                //logger.info("this is entrytimes4 " + entrytimes4, locale);
                CSVWriter writer1 = new CSVWriter(new FileWriter(csvFilename1, false));     
                writer1.writeNext(null);
                writer1.close();
            }


            for(int i = 0; i < entrytimes4; i+=4){          
                String[] individual = {INPUTTOCSV.get(i), INPUTTOCSV.get(i+1), INPUTTOCSV.get(i+2), INPUTTOCSV.get(i+3)};
                //logger.info("This is individual " + individual, locale);
                if(i == 0){
                  CSVWriter writer1 = new CSVWriter(new FileWriter(csvFilename1, false));
                  writer1.writeNext(individual);     
                  writer1.close();
                }
                else{
                  CSVWriter writer1 = new CSVWriter(new FileWriter(csvFilename1, true));
                  writer1.writeNext(individual);     
                  writer1.close();
                }        
            }

}else{

        }



            CSVReader reader3 = new CSVReader(new FileReader(csvFilename1));     

            while ((CurnextLine_InputPage = reader3.readNext()) != null) {
                if (CurnextLine_InputPage[0] != null){
                  currentString += CurnextLine_InputPage[0] + "\t" + CurnextLine_InputPage[1] + "\t" + CurnextLine_InputPage[2] + "\t" + CurnextLine_InputPage[3] + "\t" + "|"; //appending each data each time the while loop loops
                }
            }
            model.addAttribute("currentString", currentString); //This is the long appended string which is to be split in the jsp page by the delimiter '|'
            reader3.close();



        return "currentO";
    }

当前O.jsp:

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page session="true" %>
<html>
<head>
    <title>Home</title>
    <script src="http://code.jquery.com/jquery-latest.min.js"></script>
    <!-- Calender Style Sheet Begin -->
    <script src="//code.jquery.com/jquery-1.10.2.js"></script>
    <script src="//code.jquery.com/ui/1.11.2/jquery-ui.js"></script>
    <script>
    $(function() {
        for (i = 0; i < 100000; i++) {
            $( "#datepicker"+i ).datepicker({ dateFormat: "mm/dd/yy", firstDay: 1, changeYear: true });
        }
    });
    </script>
</head>
<body>
<%-- <form:form method="post" action="" commandName="currentOutage"> --%>
<form:form method="post"  modelAttribute="currentOutage">
<tr><td><h2>Input Current Outage</h2></td><td></td></tr>
<tr><td>&nbsp;</td><td></td></tr>
  <tr><td>Date: </td><td><input type="text" name="date" id="datepicker1" style="width: 80px;"></td></tr>
  <tr><td>Type: </td><td>
    <select name="type">
        <option value="">Select...</option> 
        <option value="Planned">Planned</option>
        <option value="Unplanned">Unplanned</option>
        <option value="Emergency">Emergency</option>  
    </select>
  </td></tr>
  <tr><td>System: </td><td><input type="text" name="system" ></td></tr>
  <tr><td>Description: </td><td><input type="text" name="description" style="width: 250px;" ></td></tr>
  <p class="submit"><input type="submit" name="commit" value="Add Current Issue"></p>

</form:form>

<h2>Current Outages</h2>
<table>
<h3><td> Date </td> <td> Type </td> <td> System </td> <td> Description </td></h3>
<!-- <tr><td>   ${ curdate }   </td><td>   ${ curtype }   </td><td>   ${ cursys }   </td><td>   ${ curdes }   </td></tr>-->

 <c:set var="currentinput_InputPage" value="${currentString}" />
  <c:forEach var="splitcurrentinput_InputPage" items="${fn:split(currentinput_InputPage, '|')}" >
      <tr><td><c:out value="${splitcurrentinput_InputPage}" /><tr><td>      
      <c:if test="${not empty splitcurrentinput_InputPage}">
        <form:form method="post"  modelAttribute="currentOutageDelete_InputPage" name="form1_InputPage">    
            <input type="hidden" value="${splitcurrentinput_InputPage}" name="CurrentDelete_InputPage">
            <input type="hidden" value="DeleteOn" name = "DeleteOn">
            <input type="submit" value="Delete" />
        </form:form>      
      </c:if>      
  </c:forEach> 
</table>

</body>
</html>

CSV 文件的 Maven 依赖项:

<dependency>
    <groupId>net.sf.opencsv</groupId>
    <artifactId>opencsv</artifactId>
    <version>2.3</version>
</dependency>

具体来说,我想要:

String [] record1 = {date,type,system,description};

包含 jsp 中的字段值日期、类型、系统和描述。

最佳答案

要将所有请求参数传递给 Controller ​​的方法,请使用以下命令:

@RequestParam Map<String,String> params

作为方法参数。然后,在该方法中,您可以使用以下代码简单地获取每个参数(例如):

String onDelete = params.get("OnDelete"); //or any other parameter name as argument

关于java - Spring MVC - 将值从 jsp 传递到 Controller - HTTP 状态 400 - 客户端发送的请求在语法上不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29159059/

相关文章:

java - 我的 getView 方法没有被调用以在 ListView 中填充数据

java - RxJava : Return List Containing Past And Current Result

java - Spring Web 开发中的通用 DAO

java - 如何存储动态列根据其生成的值在表上并传递给查询字符串

java - Servlet 响应错误的动态错误页面

java - 使用 TimeZone 解析日期 (java/android)

java - 对本地存储库(gradle)中的依赖关系感到困惑

java - 本地主机 :8080 requires login and password - tomcat + h2

Java spring参数化.xml配置文件

javascript - 如果 session 无效,则禁用浏览器后退按钮