簡體   English   中英

Spring MVC注冊自定義PropertyEditor

[英]Spring mvc register custom PropertyEditor

假設我們有:

車類:

public class Car{
   private String model;
   private String brand;
   private Collection<People> owners;

   //constructor,getters and setters
}

班級人員:

public class People{
   private Car car;
   private String name;
   private Gender gender;

   //constructor,getters and setters
}

班級性別:

public class Gender{
   private Char gender;

   //constructor,getters and setters
}

然后,如果我想將集合所有者傳遞給我的視圖:

<body>
        <h1>Car detail: </h1>
        <h2>Owners: </h2>
        <table>
            <form:form modelAttribute="owners" method="post" action="processOwnersSelection.htm">
                <tr>
                    <td>
                        <ul>
                            <form:checkboxes element="li" path="owners" items="${owners}"></form:checkboxes>
                        </ul>
                    </td>
                </tr>
                <tr>
                    <td>
                        <button type="submit">Next</button>
                    </td>
                </tr>
            </form:form>
        </table>               
    </body>

通過我的控制器:

@RequestMapping(value = "/selectOwners")
    protected ModelAndView showOwnersSelection() throws ServiceException{
        return new ModelAndView("car/ownerSelection", "owners", super.getService().getAllOwners());
    }

注意。 這將用於將多個所有者(存在於out DB中)連接到汽車。

我會得到一個錯誤:

org.springframework.beans.NotReadablePropertyException:Bean類[java.util.HashMap $ Values]的無效屬性“ owners”:Bean屬性“ owners”不可讀或具有無效的getter方法:getter的返回類型是否與設置器的參數類型?


據我了解,Spring通過使用PropertyEditor或Converter的實現來轉換這些?

所以我應該手動編寫一個,但是Spring怎么知道我讓他(或她)必須使用一個? 以及一個什么樣子呢?

總是看到

 <form:form modelAttribute="owners" method="post" 
  action="processOwnersSelection.htm">

modelAttribute應該是對象的引用名稱,該對象包含其形式下的所有屬性。

我們可以使用spring標簽的path屬性(例如復選框或whaever)來訪問它們。

我正在請您將owners用作modelAttribute,並且它可能不是控制程序中的People類的模型。

我不知道您如何在控制器中定義它。

我認為您必須在以下代碼中使用People參考模型屬性而不是owners

 <form:form modelAttribute="owners" method="post" 
      action="processOwnersSelection.htm">

因為path="owners"會嘗試在您為控制器內的modelAttribute="owners"定義的類內查找owners屬性。

請正確檢查。

Spring 3 Type Converter SPI取代了JavaBean PropertyEditor。

配置文件中的<mvc:annotation-driven />將自動安裝默認類型轉換器。 我們可以使用諸如@DateTimeFormat或@NumberFormat的注釋覆蓋默認值。

對於自定義字段類型,我們可以在配置上遵循以下約定:

  1. 定義一個靜態valueOf(String)方法或Constructor(String)以從其String表示形式解析您的值

  2. 實現toString()以打印您的值以供顯示

有關更多詳細信息,請參見此鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM