1

私は春のmvcを学んでいました。ログイン時にユーザーの個人データが表示される画面を開発しました。同じ画面に、個人データを更新するための更新ボタンがあります。

私の問題は、 personaldata.jsp で、フォームフィールドとして言及されていないユーザー名、パスワードなどのユーザープロパティが、フォーム送信後に null に設定されることです。

以下は私のpersonaldata.jspです

  <form:form name="customerForm" id="customerForm" commandName="customerForm" method="post" >
            <form:hidden path="userName" id="userName"/>
             <form:hidden path="emailAddress" id="emailAddress"/>
             <form:hidden path="password" id="password"/>
            <div class="faq_rightin">
                <div class="faq_icon"><img src='<c:url value="/images/icon19.png" />' alt=""></div>
                <div class="faq_ohc2">
                    <h1><spring:message code="myaccount.label.personaldata" text="Personal Data"></spring:message></h1>
                    <span class="common ul-font-style m_top ">Welcome ${customerForm.firstName} ${customer.lastName}</span>
                    <span class="red"><spring:message code="myaccount.label.personalinfodesc" text="You may here enter your personal Information, enabling you to use those when you make your next booking. Doing so, your user experience is better, quicker."></spring:message></span>
                    <div class="m_top pd-form-box">
                        <div class="comm_md m_top float-left">
                            <div class="pd-colum1 mrg-rgt10">
                                <span class="pd-name-title mrg-rgt10">
                                    <select class="select-pd-name1" id="delivery_method" >
                                        <option class="select-pd-name1" value="0">Mr</option>
                                        <option value="1">Mrs</option>
                                        <option value="2">Miss</option>
                                    </select>
                                </span>
                                <span>
                                    <spring:message code="myaccount.label.firstname" text="First Name" var="firstname" />
                                    <form:input path="firstName" id="firstName" cssClass="pd-form-txt-common pd-txt1 float-left shadow"  placeholder="${firstname}*" />
                                </span>
                            </div>
                            <div class="pd-colum2 ">
                                <spring:message code="myaccount.label.familyname" text="Family Name" var="lastname"></spring:message>
                                <form:input path="lastName" id="lastName" cssClass="pd-form-txt-common pd-txt2 float-left shadow"  placeholder="${lastname}*" />
                            </div>
                        </div><!--end row -->

                        <div class="comm_md m_top float-left">
                            <div class="pd-colum1 mrg-rgt10">
                                <div class="comm_md float-left">
                                    <spring:message code="myaccount.label.emailaddress" text="Email-Address"></spring:message>* : ${customerForm.emailAddress}
                                </div>
                                <a href="#" class="comm_md blue_txt bold float-left"><spring:message code="myaccount.label.changeyouremailaddress" text="Change your Email Address"></spring:message> &gt;</a>                                
                            </div>
                            <div class="pd-colum2 ">
                                <div class="comm_md float-left">
                                    <spring:message code="myaccount.label.birthday" text="Birthday"></spring:message>*
                                </div>
                                <div class="comm_md float-left">
                                    <!--<form method="post" action="">  
                                        <div class="select_md3 float-left">
                                            <form:select path="day" id="" cssClass="select2">
                                                <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>
                                        </div>
                                    </form>-->
                                    <div class="select_md3 float-left">
                                        <form:select path="day" id="birthDay" cssClass="select2" items="${days}"/>
                                    </div>

                                    <span class="float-left f13 p_5">/</span>  
                                    <!--<form method="post" action="">  
                                        <div class="select_md3 float-left">
                                             <form:select path="month" id="" cssClass="select2">
                                                <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>
                                        </div>
                                    </form>-->
                                    <div class="select_md3 float-left">
                                        <form:select path="month" id="birthMonth" cssClass="select2" items="${months}"/>
                                    </div>
                                    <span class="float-left f13 p_5">/</span>
                                    <!--<form method="post" action="">  
                                        <div class="select_md4 float-left">
                                             <form:select path="year" id="" cssClass="select2">
                                                <form:option value="1">2011</form:option>
                                                <form:option value="2">2012</form:option>
                                                <form:option value="3">2013</form:option>
                                                <form:option value="4">2014</form:option>
                                             </form:select>
                                        </div>
                                    </form> -->
                                    <div class="select_md4 float-left">
                                        <form:select path="year" id="birthYear" cssClass="select2" items="${years}"/>
                                    </div>
                                </div>
                            </div>
                        </div><!--end row -->

                        <div class="comm_md m_top float-left">
                            <div class="pd-colum1 mrg-rgt10">
                                <span>
                                    <spring:message code="myaccount.label.code" text="Code" var="phonecode"></spring:message>
                                    <form:input path="phoneCode" id="phoneCode" cssClass="pd-form-txt-common pd-txt3 float-left mrg-rgt10 shadow" placeholder="${phonecode}"/>
                                </span>
                                <span>
                                    <spring:message code="myaccount.label.phonenumber" text="Phone Number" var ="phonenumber"></spring:message>
                                    <form:input path="phoneNumber" id="phoneNumber" cssClass="pd-form-txt-common pd-txt1 float-left shadow" placeholder="${phonenumber}"/>
                                </span>
                            </div>
                            <div class="pd-colum2 ">
                                <span>
                                    <spring:message code="myaccount.label.code" text="Code" var="mobileCode"></spring:message>
                                    <form:input path="mobileCode" id="mobileCode" cssClass="pd-form-txt-common pd-txt3 float-left mrg-rgt10 shadow" placeholder="${mobileCode}"/>
                                </span>
                                <span>
                                    <spring:message code="myaccount.label.mobilenumber" text="Mobile Number" var="mobileNumber"></spring:message>
                                    <form:input path="mobileNumber" id="mobileNumber" cssClass="pd-form-txt-common pd-txt4 float-left shadow"  placeholder="${mobileNumber}*"/>
                                </span>
                            </div>
                        </div><!--end row -->

                        <div class="comm_md m_top float-left">
                            <div class="pd-colum1 mrg-rgt10">
                                <form:select path="idDocument" cssClass="select-pd-name" id="idDocument">
                                    <form:option value="0"><spring:message code="myaccount.label.identificationdocument" text="Identification Document"></spring:message></form:option>
                                    <form:option value="1"><spring:message code="myaccount.label.passport" text="Passport"></spring:message></form:option>
                                    <form:option value="2"><spring:message code="myaccount.label.license" text="License"></spring:message></form:option>
                                </form:select>
                            </div>
                            <div class="pd-colum2 ">
                                <span class="f13 bold"><spring:message code="myaccount.label.invoiceaddressforcompanies" text="Invoice Address for Companies"></spring:message></span>
                            </div>
                        </div><!--end row -->

                        <div class="comm_md m_top float-left">
                            <div class="pd-colum1 mrg-rgt10">
                              <form:input path="idNumber" cssClass="pd-form-txt-common pd-txt5 float-left shadow" placeholder="Ausweisnumber*"/>
                            </div>
                            <div class="pd-colum2 ">
                                <input type="checkbox" name="" class="mrgrgt5" id=" "><span class="f13"><spring:message code="myaccount.label.sameasmailaddress" text="Same as mail Address"></spring:message> </span>
                            </div>
                        </div><!--end row -->

                        <div class="comm_md m_top float-left">
                            <div class="pd-colum1 mrg-rgt10">
                                <span class="f13 bold"><spring:message code="myaccount.label.address" text="Address"></spring:message></span>
                            </div>
                            <div class="pd-colum2 ">
                                <span>
                                    <spring:message code="myaccount.label.companyname" text="Company Name" var="companyname"></spring:message>
                                    <form:input id="companyName" path="companyName" class="pd-form-txt-common pd-txt2 float-left mrg-rgt10 shadow" placeholder="${companyname}"/>
                                </span>                       
                            </div>
                        </div><!--end row -->

                        <div class="comm_md m_top float-left">
                            <div class="pd-colum1 mrg-rgt10">
                                <span>
                                      <spring:message code="myaccount.label.street" text="Street" var="${street}"></spring:message>
                                      <form:input path="address.street" id="street" cssClass="pd-form-txt-common pd-txt1 float-left mrg-rgt10 shadow" placeholder="${street}"/>
                                </span>
                                <span>
                                    <form:input path="address.streetNo" id="streetNo" cssClass="pd-form-txt-common pd-txt3 float-left shadow" placeholder="No"/>
                                </span>
                            </div>
                            <div class="pd-colum2 ">                                
                                <span>
                                    <spring:message code="myaccount.label.street" text="Street" var="street"></spring:message>
                                    <form:input path="address.companyStreet" id="compStreet" cssClass="pd-form-txt-common pd-txt4 float-left mrg-rgt10 shadow" placeholder="${street}"/>
                                </span>
                                <span>
                                    <form:input path="address.companyStreetNo" id="compStreetNo" cssClass="pd-form-txt-common pd-txt3 float-left shadow" placeholder="No"/>
                                </span>
                            </div>
                        </div><!--end row -->

                        <div class="comm_md m_top float-left">
                            <div class="pd-colum1 mrg-rgt10">
                                <span>
                                    <spring:message code="myaccount.label.plz" text="PLZ" var="zip"></spring:message>
                                    <form:input path="address.postalCode" id="postalCode" cssClass="pd-form-txt-common pd-txt3 float-left mrg-rgt10 shadow" placeholder="${zip}"/>
                                </span>
                                <span>
                                    <spring:message code="myaccount.label.town" text="Town" var="compcity"></spring:message>
                                    <form:input path="address.city" id="city" cssClass="pd-form-txt-common pd-txt1 float-left shadow" placeholder="${compcity}"/>
                                </span>
                            </div>
                            <div class="pd-colum2 ">
                                <span>
                                    <spring:message code="myaccount.label.plz" text="PLZ" var="plzcomp"></spring:message>
                                    <form:input path="address.companyPostalCode" id="compPostalCode" cssClass="pd-form-txt-common pd-txt3 float-left mrg-rgt10 shadow" placeholder="${plzcomp}"/>
                                </span>
                                <span>
                                    <spring:message code="myaccount.label.town" text="Town" var="comtown"></spring:message>
                                    <form:input path="address.companyCity" id="compCity" cssClass="pd-form-txt-common pd-txt4 float-left shadow" placeholder="${comtown}"/>
                                </span>                         
                            </div>
                        </div><!--end row -->

                        <div class="comm_md m_top float-left">
                            <div class="pd-colum1 mrg-rgt10">
                                <!--<select class="select-pd-name" id="delivery_method" >
                                    <option class="select-pd-name" value="0"><spring:message code="myaccount.label.country" text="Country"></spring:message></option>
                                    <option value="1">England</option>
                                    <option value="2">Irland</option>
                                </select> -->
                                <spring:message code="myaccount.label.country" text="Country" var="country"></spring:message>
                                <form:input path="address.country" id="country" cssClass="select-pd-name" placeholder="${country}"/>
                            </div>
                            <div class="pd-colum2 ">
                                <!--  <select class="select-pd-name" id="delivery_method" >
                                    <option class="select-pd-name" value="0"><spring:message code="myaccount.label.country" text="Country"></spring:message></option>
                                    <option value="1">England</option>
                                    <option value="2">Irland</option>
                                </select>-->
                                <spring:message code="myaccount.label.country" text="Country" var="compCountry"></spring:message>
                                <form:input path="address.companyCountry" id="compCountry" cssClass="select-pd-name" placeholder="${compCountry}"/>
                            </div>
                        </div><!--end row -->                                               

                        <div class="comm_md m_top float-left">
                            <div class="pd-colum1 mrg-rgt10">
                                <select class="select-pd-name" id="delivery_method" >
                                    <option class="select-pd-name" value="0"><spring:message code="myaccount.label.eticketidentification" text="E-ticket Identification"></spring:message></option>
                                    <option value="1">England</option>
                                    <option value="2">Irland</option>
                                </select>
                            </div>
                            <div class="pd-colum2 flt-rgt ">
                                <spring:message code="myaccount.label.vatnumber" text="VAT Number" var="vatNumber"></spring:message>
                                <form:input path="vatNumber" id="vatNumber" cssclass="pd-form-txt-common pd-txt2 float-left mrg-rgt10 shadow" placeholder="${vatNumber}"/>
                            </div>
                        </div><!--end row -->

                        <div class="comm_md m_top float-left">
                            <div class="pd-colum1 mrg-rgt10">
                                <span class="f13 blue_txt"><b>*</b><spring:message code="myaccount.label.fieldsmustbefilledout" text="Fields must be filled out"></spring:message></span>
                            </div>
                            <div class="pd-colum2 flt-rgt ">
                                <input type="checkbox" name="" class="mrgrgt5"><span class="f13"><spring:message code="myaccount.label.futureinformationsofspecialofferings" text="I want to have in future informations about special of ferings for t4b customers."></spring:message> </span>
                            </div>
                        </div><!--end row -->

                        <div class="comm_md m_top float-left">
                            <div class="pd-colum1 mrg-rgt10">
                                <select class="select-pd-name" id="delivery_method" >
                                    <option class="select-pd-name" value="0"><spring:message code="myaccount.label.languagepreferred" text="Language ,Preferred"></spring:message></option>
                                    <option value="1">Sizilian</option>
                                    <option value="2">English</option>
                                </select>
                            </div>
                            <div class="pd-colum2 flt-rgt ">
                                <input type="submit" name="" id="store" class="common-btn float-right" value="<spring:message code="myaccount.label.store" text="Store"></spring:message>" />
                            </div>
                        </div><!--end row -->

                    </div><!--end pd-form-box -->                      
                </div>
            </div>
          </form:form>

この問題を解決するには、ユーザー名とパスワードに非表示のフォーム フィールドを使用する必要があります。jspに記載されていないフォームフィールドがnullに設定されないようにする他の解決策はありますか?

以下は、ログインに成功した後の私のリクエストハンドラーです

@RequestMapping(value = "/personaldata", method = RequestMethod.GET)
    public String personalData(Map<String, Object> map,
            HttpServletRequest request, Principal principal) {
        logger.info("Default Page");

        try {
            String userName = principal.getName();
            logger.debug("*******User name: " + userName);
            CustomerVO customerVO = customerService.findByUserName(userName);
            map.put("customerForm", customerVO);
        } catch (T4BException e) {
            logger.error(e.getLocalizedMessage());
        }
        /*
         * map.put("search", searchVO); if
         * (request.getParameter("ajax_get_standard_content") != null &&
         * request.getParameter("ajax_get_standard_content").equals("on")) {
         * return "home.definition.ajax"; } else { return "home.definition"; }
         */
        return "myaccount.personaldata";
    }

そこで、モデル mao にバッキング Bean を追加します。

以下は、データを更新するための私のリクエストハンドラーです

    @RequestMapping(value = "/storepersonal", method = RequestMethod.POST)
        public String storePersonal(@ModelAttribute("customerForm")CustomerVO customerVO , Map<String, Object> map,
                HttpServletRequest request, HttpSession session,Principal principal) {
        try {
            customerService.updateCustomer(customerVO);
            //map.put("customerForm", customerService.findByUserName(customerVO.getUserName()));
        } catch (T4BException e) {
            logger.error(e.getLocalizedMessage());
        }

    logger.info("Store Personal Page");
    /*
     * map.put("search", searchVO); if
     * (request.getParameter("ajax_get_standard_content") != null &&
     * request.getParameter("ajax_get_standard_content").equals("on")) {
     * return "home.definition.ajax"; } else { return "home.definition"; }
     */
    return "myaccount.personaldata";
} 

「customerForm」に指定された @ModelAtrribute は、ドキュメントに従って、モデル マップに存在する既存の modelAttribute を使用する必要があります。そのため、jsp で言及されているフォーム フィールドのみをユーザーが入力したものに設定し、customerForm の残りのフィールドは以前のモデル マップと同じにする必要があります。

4

1 に答える 1

1

ドキュメントからの抜粋は次のとおりです。

メソッド引数の @ModelAttribute は、引数をモデルから取得する必要があることを示します。モデルに存在しない場合は、引数を最初にインスタンス化してからモデルに追加する必要があります。モデルに存在する場合、引数のフィールドは、一致する名前を持つすべてのリクエスト パラメータから入力する必要があります。

[...]

@RequestMapping(value="/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST)
public String processSubmit(@ModelAttribute Pet pet) {

}

上記の例を考えると、 Pet インスタンスはどこから来ることができますか? いくつかのオプションがあります:

  • @SessionAttributes を使用しているため、すでにモデルに含まれている可能性があります。「@SessionAttributes を使用して、リクエスト間の HTTP セッションにモデル属性を保存する」というセクションを参照してください。
  • 前のセクションで説明したように、同じコントローラーの @ModelAttribute メソッドにより、モデルに既に存在している可能性があります。
  • URI テンプレート変数と型コンバーターに基づいて取得できます (以下で詳しく説明します)。
  • デフォルトのコンストラクターを使用してインスタンス化できます。

したがって、コントローラーには次のものが必要です。

@ModelAttribute("foo")
private Foo prepareFoo() {
    // get the foo to update from the database and return it.
    // Spring will store it in the model
}

@RequestMapping(...)
public ModelAndView submitForm(@ModelAttribute("foo") Foo foo) {
    // Spring will pass the Foo that has been prepared and stored in the model,
    // updated with the values submitted in the HTML form
}
于 2013-05-31T07:11:34.943 に答える