2017-08-25 1 views
0

Ich habe ein Problem mit meinem Spring-Controller und einem html: Es gibt keine Bindung erfolgt, wo auf die Schaltfläche abschicken geklickt wird.Spring Controller macht keine Formularbindung

Dies ist die Form:

<form class="form-horizontal" role = "form" id="searchtodayeventsform"> 


        <div class = "form-group"> 
         <label for = "note" class = "col-sm-3 control-label">Date</label> 
          <div class = "col-sm-8"> 
           <input type = "date" class = "form-control" id = "todaydatevalue" placeholder = "MM/DD/AAAA"> 
          </div> 
        </div> 


        <div class = "form-group"> 
         <label for = "type" class = "col-sm-3 control-label">OS</label> 
          <div class = "col-sm-8"> 
           <select class = "form-control" id = "osnamevalue" name="todayostypeoptions"> 
           <option value="Linux">Linux</option> 
           <option value="Windows">Windows</option> 
           </select> 
          </div> 
        </div> 


        <div class = "form-group"> 
         <div class = "col-sm-offset-2 col-sm-10" id="submit"> 
          <button type = "submit" class = "btn btn-default">Cerca</button> 
         </div> 
        </div> 

Dies ist die Funktion zur Steuerung Datumsparameter und Senden alle an den Controller verwendet:

DTevents = $('#eventsosdatedata').DataTable( 
      { 
       "serverSide": true, 
       "ajax":{ 
          url: "../geteventsosdate.json", 
          type: "post", 
          "data": function (d) 
          { 
           var param = {osnamevalue : $('#osnamevalue').val()}; 

           if(moment($('#todaydatevalue').val()).isValid()) 
           param = $.extend(param, {datevalue : moment($('#todaydatevalue').val()).toDate().getTime()}); 
           console.log(param); 
           return $.extend(d, param); 
          } 

         }, 

Dies ist der Controller:

/** 
    * This method is used when a list of events of speficic day and os are requested 
    * 
    * @param model the model data 
    * @param request the http request 
    * @param os the os choosed 
    * @param date the date desired 
    * @return the updated model 
    * @throws IOException 
    */ 
    @PostMapping(value="/geteventsosdate.json") 
    @ResponseBody 
    public ModelAndView showEventsOsDate(ModelAndView model, HttpServletRequest request, 
      @RequestParam(name="osnamevalue", required=false) String os, 
      @RequestParam(name="todaydatevalue", required=false) Long date) throws IOException 
    { 
     Timestamp date_value; 
     Date effective_date = null; 

     if(date != null) 
     { 
      date_value = new Timestamp(date); 
      effective_date = new Date(date_value.getTime()); 
     } 

     //First, we must populate the list of Events 
     List<Events> listEvents = networks.getEventsWithDateAndOs(os, effective_date); 

     //Second, we put this list in the model and set properties for jquery datatables 
       model.addObject("recordsTotal", listEvents.size()); 
       model.addObject("recordsFiltered", listEvents.size()); 
       model.addObject("data", listEvents); 

     //Finally, we return the model 
     return model; 
    } 

Die Abfrage innerhalb des Controllers erfolgt in dieser DAO-Klassenmethode:

/** 
    * Return the events with same format of the current day table, 
    * where users can choose day and os. 
    * 
    * @return a list with join query results 
    */ 
    public List<Events> getEventsWithDateAndOs(String os, Date date) 
    { 
     /** 
     * This is the string that contain the query to obtain the data from join of 
     * hosts and events with aggregator operations. 
     */ 
     String SQL = "SELECT hosts.name, hosts.os," 
       + " MAX(case when events.type = 'Applications' then events.status end) as Applications," 
       + " MAX(case when events.type = 'OS' then events.status end) as OS_Type," 
       + " MAX(case when events.type = 'Running Services' then events.status end) as Running_Services," 
       + " MAX(case when events.type = 'TCP Services' then events.status end) as TCP_Services," 
       + " MAX(case when events.type = 'File Integrity' then events.status end) as File_Integrity," 
       + " MAX(case when events.type = 'Services' then events.status end) as Services" 
       + " FROM hosts JOIN events ON hosts.id = events.host_id" 
       + " WHERE events.date = ? AND (? is null or hosts.os = ?)" 
       + " GROUP BY hosts.name"; 

     /** 
     * The list containing the results is obtained using the method query on jdcbtemplate, giving in in input to it the query string, the array of object 
     * containing the input variabile of the method and the rowmapper implemented. 
     */ 
     List<Events> theEvents = jdbcTemplate.query(SQL, new Object[]{os, os, date}, new EventTypeCountMapper()); 

     return theEvents; 
    } 

mit diesem rowmapper:

import java.sql.ResultSet; 
import java.sql.SQLException; 

import org.consorziotriveneto.networks.entity.Events; 
import org.springframework.jdbc.core.RowMapper; 

public class EventTypeCountMapper implements RowMapper<Events> 
{ 
     //This method must be implemented when we use a row mapper 
     public Events mapRow(ResultSet rs, int rowNum) throws SQLException 
     { 
      Events events = new Events(); 


      //mapping of hosts attributes 
      events.setName(rs.getString("hosts.name")); 
      events.setOs(rs.getString("hosts.os")); 
      //mapping od count query 
      events.setApplications(rs.getString("Applications")); 
      events.setOs_type(rs.getString("OS_Type")); 
      events.setServices(rs.getString("Services")); 
      events.setRunning_services(rs.getString("Running_Services")); 
      events.setTcp_services(rs.getString("TCP_Services")); 
      events.setFile_integrity(rs.getString("File_Integrity")); 

      return events; 

     } 
} 

die App ausgeführt wird, in der Konsole hat ich:

Object { osnamevalue: undefined, datevalue: 1503646503530 } 

Mit o Namen nicht gefasste und Zeitstempel des aktuellen Tages und nicht der ausgewählten.

Dies ist nicht die erste Form verbindlich in meiner App; Ich folge dem gleichen Schema mit anderen und es gab keine Probleme. Mein Eindruck ist, dass ich etwas vergessen habe, einen bestimmten Schritt oder ich habe etwas falsch gemacht, aber ich verstehe nicht was.

+0

Ihre Daten in Ajax gesandt hat, ist eine Funktion aber nach https://api.jquery.com/jquery.post/ String oder schlicht Objekt erwartet. Versuchen Sie es zu vereinfachen, um '{osnamevalue:" test ", datevalue: 111}' zu senden und sehen Sie, ob der Controller das Ergebnis korrekt erhält. JJust zu verstehen, ob es Server- oder Client-Problem ist – StanislavL

Antwort

0

Es wird keine Bindung erstellt, da der Parameter name nicht angegeben ist.

Bitte versuchen Sie es wie folgt aus:

<input type = "date" class = "form-control" id = "todaydatevalue" name"todaydatevalue" placeholder = "MM/DD/AAAA">