Spring 폼 의 initBinder: 바 인 딩 폼 복잡 속성

5216 단어 InitBinder
오늘 문제 가 발생 했 습 니 다. 페이지 폼 에는 id 가 있 지만 폼 컨트롤 러 command 에 서 는 javabean 입 니 다. String 을 javabean 으로 변환 하면 요?이미 hibenate 에 서 비 스 를 제공 하 는 javabean 이 있 기 때문에, 나 는 javabean 을 하나 더 쓰 고 나 서 다시 멍청 하 게 전환 하고 싶 지 않다.
Simple FormController 의 API 를 볼 때 부모 클래스 BaseCommandController 에서 온 방법 이 있 습 니 다. initBinder:
BaseCommandController (Spring Framework)
initBinder
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception

Initialize the given binder instance, for example with custom editors. Called by 
dede<.
This method allows you to register custom editors for certain fields of your command class. For instance, you will be able to transform Date objects into a String pattern and back, in order to allow your JavaBeans to have Date properties and still be able to set and display them in an HTML interface.
Default implementation is empty.
Parameters:
dede< - current HTTP request
dede< - new binder instance
서 툰 분할 선
----------------------------------------
예전 에 IoC 용 기 를 배 웠 을 때 '속성 편집기' 가 언급 된 것 을 떠 올 리 면, IoC 프로필 에 특정 '편집기' 를 등록 하면 String 을 javabean 으로 변환 할 수 있다.
책 을 넘 겼 습 니 다. 속성 편집 기 를 사용자 정의 하려 면 Property Editor Support 를 계승 하고 안에 있 는 setAsText 방법 을 다시 쓰 고 등록 하면 됩 니 다.책 에는 IoC 용기 의 프로필 이 등록 되 어 있 을 뿐, initBinder 를 다시 쓰 는 방법 으로 등록 되 어 있 을 것 입 니 다.
initBinder 는 속성 편집 기 를 등록 하 는 데 사용 되 는 인삼 binder 가 있 습 니 다. ServletRequestDataBinder 형식 입 니 다. API 를 보 려 면 부모 클래스 DataBinder 에서 온 방법 이 있 습 니 다. registerCustomEditor:
DataBinder (Spring Framework)
public void registerCustomEditor(Class requiredType, String field, PropertyEditor propertyEditor)

Description copied from interface: 
de<
PropertyEditorRegistry
de<
Register the given custom property editor for the given type and property, or for all properties of the given type.
If the property path denotes an array or Collection property, the editor will get applied either to the array/Collection itself (the PropertyEditor has to create an array or Collection value) or to each element (the PropertyEditor has to create the element type), depending on the specified required type.
Note: Only one single registered custom editor per property path is supported. In case of a Collection/array, do not register an editor for both the Collection/array and each element on the same property.
어 리 석 은 분할 선
방법의 입 참 명 은 이미 의 도 를 뚜렷하게 드 러 냈 다.required Type 은 분명히 command 의 javabean 을 말 합 니 다. field 는 command 에 대응 하 는 필드 이름 이자 폼 에 대응 하 는 name 을 말 합 니 다. property Editor 는 사용자 정의 속성 편집기 입 니 다.
예:
/ / 사용자 정의 속성 편집기
public class CollegeEditor extends PropertyEditorSupport{
    private CollegeService collegeService;
    public CollegeService getCollegeService() {
        return collegeService;
    }
    public void setCollegeService(CollegeService collegeService) {
        this.collegeService = collegeService;
    }
    
    public void setAsText(String collegeId){
        int id = Integer.valueOf(collegeId);
        College college = collegeService.findCollegeById(id);
        setValue(college);
    }
}
/ / SimpleFormController 를 다시 쓰 는 initBinder 방법
public void initBinder(HttpServletRequest request, ServletRequestDataBinder binder){
        binder.registerCustomEditor(College.class, "college", collegeEditor);
    }
물론 IoC 용기 에 주입 해 야 할 주입 을 잊 지 마 세 요.

좋은 웹페이지 즐겨찾기