web-dev-qa-db-fra.com

Spring MVC Multiple ModelAttribute sur le même formulaire

J'ai un formulaire avec deux ModelAttributes, l'un est citoyen et l'autre punition. Les deux objets sont séparés par des onglets jquery. Je ne parviens pas à afficher correctement les éléments du formulaire. Certains éléments sont affichés et d'autres pas. Je veux dire les éléments HTML. 

Je ne suis pas sûr de l'apparence du contrôleur lorsqu'il y a plusieurs ModleAttributes sur la page. Sous est un échantillon du code:

Page

<title>Citizen Registration</title>

    </head>

    <body>  
        <div id="tabs"> 

        <ul>
            <li><a href="#tab1">Citizen Registration</a></li>
            <li><a href="#tab2">Punishment</a></li>
        </ul>


        <div id="tab1">
            <form:form id="citizenRegistration" name ="citizenRegistration" method="post" modelAttribute="citizens" action="citizen_registration.htm">
                <div id="divRight" class="mainDiv">             
                    <div class="divGroup" id="divCharInfo"> 
                    <fieldset>  
                    <legend>Characteristics Info</legend>
                            <ol>    
                                <li><form:label for="photo" path="photo">Select Photo</form:label>
                                    <form:input path="photo" type="file" id="photo" title="Upload a photo"/><form:errors path="photo" id="errors"/></li>

                                <li>
                                    <label>Select Gender</label>
                                    <form:select path="genderId" id="genderId" title="Select Your Gender">
                                    <form:options items = "${gender.genderList}" itemValue="genderId" itemLabel="genderDesc" />
                                    </form:select>
                                    <form:errors path="genderId" class="errors"/>
                                </li>               

                                <li><form:label for="weight" path="weight">Enter Weight <i>(lbs)</i></form:label>
                                    <form:input path="weight" id="weight" title="Enter Weight"/><form:errors path="weight" id="errors"/>
                                </li> 

                                <li><form:label for="height" path="height">Enter Height <i>(feet)</i></form:label>
                                    <form:input path="height" id="height" title="Enter Height"/><form:errors path="height" id="errors"/>
                                </li> 
                                                .......................


            <div id="tab2">
                <form:form id="punishmentRegistration" name ="punishmentRegistration" method="post" modelAttribute="punishment" action="punishment_registration.htm">

                <ol>
                    <li>
                        <form:label for ="punishmentId" path="punishmentId">Punishment Number</form:label>
                        <form:input path="punishmentId" id="punishmentId"/><form:errors path="punishmentId" id="errors"/>                   
                    </li>

                    <li>
                        <form:label for="crimeRecNo" path="crimeRecNo">Select Crime</form:label>
                        <form:select path="crimeRecNo" id="CrimeRecNo" title="Select Crime">
                        <form:options items = "${crime.crimeList}" itemValue="crimeRecNo" itemLabel="crimeRecNo" title="crimeDesc"/>
                        </form:select>
                        <form:errors path="crimeRecNo" id="errors"/>
                    </li>   

                    <li>
                        <form:label for ="monitoringStDate" path="monitoringStDate"> Start Date </form:label>
                        <form:input path="monitoringStDate" id="monitoringStDate"/><form:errors path="monitoringStDate" id="errors"/>                   
                    </li>


                    <li>
                        <form:label for ="monitoringEnDate" path="monitoringEnDate"> End Date </form:label>
                        <form:input path="monitoringEnDate" id="monitoringEnDate"/><form:errors path="monitoringEnDate" id="errors"/>                   
                    </li>                   
                </ol>               

                </form:form>            
            </div>                      

        </div>

    </body>
</html>

Manette

@RequestMapping(value="citizen_registration.htm", method = RequestMethod.GET)
    public ModelAndView loadPage(HttpServletRequest request,
                                 HttpServletResponse response,
                                 @ModelAttribute Citizens citizens, @ModelAttribute Punishment punishment,
                                 BindingResult result,
                                 ModelMap m, Model model) throws Exception {

//code here

return new ModelAndView("citizen_registration");

Ceci est mon code cependant quand je le lance rien dans tab2 n'est affiché et pas tous les éléments dans tab1 sont montrés.

22
devdar

Je ne pense pas que vous puissiez lier plusieurs modèles à l'aide du formulaire Spring. En fait, vous devriez jeter un coup d'œil au formulaire de reliure à ressort . http://static.springsource.org/spring/docs/1.1.5/taglib/tag/BindTag.html . regardez dans l'exemple de code. Je n'ai pas testé le code. Informez-le en cas de problème.

Modèle

public class User{

private String username;
private String password;

..Setter and Getters
}

public class UserProfile{
private String firstName;
private String lastName;

setter and getter
}

Manette

@Controller
public class MyController{
    @RequestMapping(....)
    public String newAccountForm(ModelMap map){
        User user = new User(); //Would recommend using spring container to create objects
        UserProfile profile = new UserProfile();

        map.addAttribute('user', user);
        map.addAttribute('profile', profile);

        return "form"
    }




     @RequestMapping(....)
        public String newAccountForm(@ModelAttrbite('User')User user, BindingResult resultUser, @ModelAttribute('UserProfile')UserProfile userProfile, BindingResult resultProfile){

//Check the binding result for each model. If not valid return the form page again
//Further processing as required.

        }
    }

JSP

<%@taglib  uri="http://www.springframework.org/tags" prefix="spring">

<form action="" method="post">

<spring:bind path="user.username">
   <input type="text" name="${status.expression}" value="${status.value}"><br />
        </spring:bind>

<spring:bind path="user.password">
   <input type="password" name="${status.expression}" value="${status.value}"><br />
        </spring:bind>

<spring:bind path="profile.firstName">
   <input type="text" name="${status.expression}" value="${status.value}"><br />
        </spring:bind>
<spring:bind path="profile.lastName">
   <input type="text" name="${status.expression}" value="${status.value}"><br />
        </spring:bind>

<input type="submit" value="Create"/>
</form>
27
Raunak Agarwal

J'ai déjà donné une approche alternative dans ce lien ici

<form:form method="POST" modelAttribute="applicationGeneralInformation">
  <div class="section2">
    <h2>General Informaion</h2>

    <form:input type="hidden" path="id" id="id"/>
    <label for="app_version">Version</label>: <form:input type="text" id="app_version" path="version"/><br/>
    <label for="app_func_desc">Description</label>: <form:input type="text" id="app_func_desc"
                                                                       path="functionalDescription"/><br/>
   <label for="app_sec_func">Functions</label>: <form:input type="text" id="app_sec_func"
                                                                  path="securityFunctions"/><br/>

</div>
<div class="section2">
  <h2>Application Content</h2>
  <form:form method="POST" modelAttribute="applicationContent">
    <div>
        <h3>CIA Rating</h3>
        <label for="CIARating">CIA Rating</label>: <form:select type="text" id="CIARating" path="CIARating">
        <form:option value="1">1</form:option>
        <form:option value="2">2</form:option>
        <form:option value="3">3</form:option>
        <form:option value="4">4</form:option>
    </form:select><br/><br/>
    </div>
    <div>
        <h3>Business Continuity and Disaster Recovery</h3>
        <div>
            <h4>RTO</h4>
            <label for="RTO">RTO</label>: <form:select type="text" id="RTO" path="RTO">
            <form:option value="1">< 2<sub>Hrs</sub></form:option>
            <form:option value="2">2<sub>Hrs</sub>-4<sub>Hrs</sub>    </form:option>
            <form:option value="3">4<sub>Hrs</sub>-48<sub>Hrs</sub></form:option>
            <form:option value="4">> 48<sub>Hrs</sub></form:option>
        </form:select><br/>
        </div>
        <div>
            <h4>RPO</h4>
            <label for="RPO">RPO</label>: <form:input type="text" id="RPO" path="RPO"/><br/>
        </div>
    </div>
  </form:form>
  <input type="submit" value="Submit">
 </div>
 </form:form>
1
Tunde Pizzle
<script type="text/javascript">
$(document).ready(
        function() {
            $("#userAttendance").submit(
                    function(e) {
                        e.preventDefault();
                        jQuery.ajaxSetup({
                            async : false
                        });
                        var a = "${pageContext.request.contextPath}";
                        alert(a);
                        $.post($(this).attr("action"), $(this).serialize(),
                                function(response) {
                                    $("#showTableByDate").html(response);
                                    jQuery.ajaxSetup({
                                        async : true
                                    });
                                });
                    });
            //Date picker
            $('#datepicker').datepicker({
                autoclose : true
            });
        });

0
Aniket