Почему свойства объекта команды, связанного с отправленной формой, являются нулевыми в этом приложении Spring MVC?

Я новичок в Spring MVC, и у меня возникла следующая проблема при попытке заполнить объект команды, отправив форму в метод контроллера.

Итак, у меня следующая ситуация:

У меня есть этот класс объекта команды с именем Step2Form:

public class Step2Form {

    String nome;
    String cognome;
    int giornoNascita;
    int meseNascita;
    int annoNascita;
    String nazioneNascita;
    String regioneNascita;
    String provinciaNascita;
    String comuneNascita;
    String sesso;
    String eMail;
    String confermaEmail;
    String trattamentoDatiPersonali;
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public String getCognome() {
        return cognome;
    }
    public void setCognome(String cognome) {
        this.cognome = cognome;
    }
    public int getGiornoNascita() {
        return giornoNascita;
    }
    public void setGiornoNascita(int giornoNascita) {
        this.giornoNascita = giornoNascita;
    }
    public int getMeseNascita() {
        return meseNascita;
    }
    public void setMeseNascita(int meseNascita) {
        this.meseNascita = meseNascita;
    }
    public int getAnnoNascita() {
        return annoNascita;
    }
    public void setAnnoNascita(int annoNascita) {
        this.annoNascita = annoNascita;
    }
    public String getNazioneNascita() {
        return nazioneNascita;
    }
    public void setNazioneNascita(String nazioneNascita) {
        this.nazioneNascita = nazioneNascita;
    }
    public String getRegioneNascita() {
        return regioneNascita;
    }
    public void setRegioneNascita(String regioneNascita) {
        this.regioneNascita = regioneNascita;
    }
    public String getProvinciaNascita() {
        return provinciaNascita;
    }
    public void setProvinciaNascita(String provinciaNascita) {
        this.provinciaNascita = provinciaNascita;
    }
    public String getComuneNascita() {
        return comuneNascita;
    }
    public void setComuneNascita(String comuneNascita) {
        this.comuneNascita = comuneNascita;
    }
    public String getSesso() {
        return sesso;
    }
    public void setSesso(String sesso) {
        this.sesso = sesso;
    }
    public String geteMail() {
        return eMail;
    }
    public void seteMail(String eMail) {
        this.eMail = eMail;
    }
    public String getConfermaEmail() {
        return confermaEmail;
    }
    public void setConfermaEmail(String confermaEmail) {
        this.confermaEmail = confermaEmail;
    }
    public String getTrattamentoDatiPersonali() {
        return trattamentoDatiPersonali;
    }
    public void setTrattamentoDatiPersonali(String trattamentoDatiPersonali) {
        this.trattamentoDatiPersonali = trattamentoDatiPersonali;
    }


}

который отображает эту форму в виде:

       <form id="reg-form" name="reg-form" action="<@spring.url '/iscrizioneStep3' />" method="post">

            <fieldset>

                <div class="form-group">
                    <label for="name">Nome <span aria-hidden="true">*</span>:</label>
                    <input type="text" id="name" name="name" class="form-control input-mm" placeholder="Inserisci il tuo nome" data-validation="[NOTEMPTY]" data-validation-label="nome" aria-required="true" tabindex="10">
                </div>

                <div class="form-group">
                    <label for="surname">Cognome <span aria-hidden="true">*</span>:</label>
                    <input type="text" id="surname" name="surname" class="form-control input-mm" placeholder="Inserisci il tuo cognome" data-validation="[NOTEMPTY]" data-validation-label="cognome" aria-required="true" tabindex="20">
                </div>

                <div class="form-group grouped">
                    <label>Data di nascita <span aria-hidden="true">*</span>:</label>
                    <div class="row">
                        <div class="col-xs-3 col-md-4">
                            <select id="birth-day" name="birth-day" class="form-control selectpicker select-mm" title="Giorno"  data-validation="[NOTEMPTY, INTEGER]" data-validation-label="giorno di nascita" aria-label="seleziona il giorno di nascita" aria-required="true" tabindex="30">
                                <option value="01">01</option>
                                <option value="02">02</option>
                                <option value="03">03</option>
                            </select>
                        </div>
                        <div class="col-xs-5 col-md-5">
                            <select id="birth-month" name="birth-month" class="form-control selectpicker select-mm" title="Mese" data-validation="[NOTEMPTY, INTEGER]" data-validation-label="mese di nascita" aria-label="seleziona il mese di nascita" aria-required="true" tabindex="40">
                                <option value="01">Gennaio</option>
                                <option value="02">Febbraio</option>
                                <option value="03">Marzo</option>
                            </select>
                        </div>
                        <div class="col-xs-4 col-md-3">
                            <select id="birth-year" name="birth-year" class="form-control selectpicker select-mm" title="Anno" data-validation="[NOTEMPTY, INTEGER]" data-validation-label="anno di nascita" aria-label="seleziona l'anno di nascita" aria-required="true" tabindex="50">
                                <option value="2000">2000</option>
                                <option value="1999">1999</option>
                                <option value="1998">1998</option>
                            </select>
                        </div>
                    </div>
                </div>

                <div class="form-group">
                    <label for="country">Nazione di nascita<span aria-hidden="true">*</span>:</label>
                    <select id="country" name="country" class="sel-dynamic sel-haschild form-control selectpicker select-mm" title="Seleziona la nazione" data-validation="[NOTEMPTY]" data-validation-label="nazione" aria-required="true" tabindex="60">
                        <option value="italy">Italia</option>
                        <option value="estero">Estero</option>
                    </select>
                </div>

                <div class="form-group">
                    <label for="region">Regione di nascita<span aria-hidden="true">*</span>:</label>
                    <select id="region" name="region" class="sel-dynamic sel-haschild form-control selectpicker select-mm" title="É necessario selezionare una regione..." data-validation="[NOTEMPTY]" data-validation-label="regione" data-choice="Seleziona la regione" aria-required="true" disabled tabindex="70">
                        <option disabled value="0">&nbsp;</option>
                    </select>
                </div>

                <div class="form-group">
                    <label for="district">Provincia di nascita<span aria-hidden="true">*</span>:</label>
                    <select id="district" name="district" class="sel-dynamic sel-haschild form-control selectpicker select-mm" title="É necessario selezionare una provincia..." data-validation="[NOTEMPTY]" data-validation-label="provincia" data-choice="Seleziona la provincia" aria-required="true" disabled tabindex="80">
                        <option disabled value="0">&nbsp;</option>
                    </select>
                </div>

                <div class="form-group clearfix">
                    <label for="municipality">Comune <span aria-hidden="true">*</span>: </label>
                    <select id="municipality" name="municipality" class="sel-dynamic form-control selectpicker select-mm" title="É necessario selezionare un comune..." data-validation="[NOTEMPTY]" data-validation-label="comune" data-choice="Seleziona un comune" aria-required="true" disabled tabindex="90">
                        <option disabled value="0">&nbsp;</option>
                    </select>
                </div>

                <div class="form-group">
                    <label>Sesso <span aria-hidden="true">*</span>:</label>
                    <div class="genderbg clearfix">
                        <label id="label-gender-m" class="radio-inline pull-left">
                            <input id="gender-m" type="radio" name="gender" value="m" data-validation="[NOTEMPTY]" data-validation-label="sesso" aria-label="scelta sesso maschio" tabindex="100">Maschio
                        </label>
                        <label id="label-gender-f" class="radio-inline pull-right">
                            <input id="gender-f" type="radio" name="gender" value="f" aria-label="scelta sesso femmina" tabindex="110">Femmina
                        </label>
                    </div>
                </div>

                <div class="form-group">
                    <label for="email">Email <span aria-hidden="true">*</span>:</label>
                    <input type="text" id="email" name="email" class="form-control input-mm" placeholder="Esempio: nome@email.it" data-validation="[NOTEMPTY, EMAIL]" data-validation-label="email" aria-required="true" tabindex="120">
                </div>

                <div class="form-group">
                    <label for="email-confirm">Conferma Email <span aria-hidden="true">*</span>:</label>
                    <input type="text" id="email-confirm" name="email-confirm" class="form-control input-mm" data-validation="[NOTEMPTY, V==email]" data-validation-label="conferma email" aria-required="true" tabindex="130">
                </div>

                <div class="form-group">
                    <label>Termini e condizioni:</label>
                    <p class="small">Dichiaro di aver letto e di accettare le <a href="#" title="Condizioni generali del servizio" tabindex="140">condizioni generali</a></p>
                    <label id="label-gencond" class="radio-inline">
                        <input id="gencond" type="radio" name="gencond" value="y" data-validation="[NOTEMPTY]" data-validation-label="termini e condizioni" tabindex="150"><strong>Accetto</strong>
                    </label>
                </div>

                <div class="form-group">
                    <label>Trattamento dei dati personali:</label>
                    <p class="small">I dati raccolti saranno utili a soddisfare le tue richieste, a migliorare i nostri servizi e a poterti comunicare le nostre novità.<br>
                    Leggi l' <a href="" title="Informativa sulla privacy" tabindex="160">informativa sulla privacy</a> e, se vuoi, presta il consenso.</p>
                    <label id="label-privacy-y" class="radio-inline">
                        <input id="privacy-y" type="radio" name="privacy" value="y" data-validation="[NOTEMPTY]" data-validation-label="privacy" tabindex="170"><strong>Accetto</strong>
                    </label>
                    <label id="label-privacy-n" class="radio-inline">
                        <input id="privacy-n" type="radio" name="privacy" value="n" tabindex="180"><strong>Non Accetto</strong>
                    </label>

                </div>

                <button type="submit" class="btn btn-block submit-btn" aria-label="prosegui la registrazione" tabindex="190">Passaggio 3</button>

            </fieldset>

        </form>

В конце концов у меня есть этот метод контроллера, который обрабатывает отправку предыдущей формы:

@RequestMapping(value = "/iscrizioneStep3", method=RequestMethod.POST)
public String iscrizioneStep3(@ModelAttribute("SpringWeb")Step2Form step2Form, ModelMap model, HttpServletRequest request) {

    System.out.println("INTO iscrizioneStep3()");
    System.out.println("NOME: " + step2Form.getNome());


    return "iscrizioneStep3";
}

Когда я отправляю форму, она входит в метод iscrizioneStep3(), но проблема заключается в том, что когда она переходит к выполнению:

System.out.println("NOME: " + step2Form.getNome());

вот что получается в моей консоли Eclipse:

19:39:00,874 INFO  [stdout] (http-localhost/127.0.0.1:8080-1) NOME: null

Так что он не установил поле nome моего командного объекта.

Зачем? Что случилось? Что мне не хватает? Как я могу это исправить?

1 ответ

<input type="text" id="name" name="name" class="form-control input-mm" placeholder="Inserisci il tuo nome" data-validation="[NOTEMPTY]" data-validation-label="nome" aria-required="true" tabindex="10">
            </div>

Должно быть

<input type="text" id="nome" name="nome" class="form-control input-mm" placeholder="Inserisci il tuo nome" data-validation="[NOTEMPTY]" data-validation-label="nome" aria-required="true" tabindex="10">
            </div>

или я что-то здесь упускаю?

Обычно Spring отображает поля с помощью атрибута "name" в соответствующую переменную в классе (<input type="hidden" name="tester" /> следует сопоставить с переменной с именем "тестер".

Другие вопросы по тегам