2015-02-06 2 views
0

컨트롤러에 제출할 JSP로 양식이 있습니다. 이제 폼의 속성 중 하나가 enum이지만이 기능을 사용할 수 없습니다.JSP에서 컨트롤러로 enum을 제출하십시오.

public class UploadFormBean { 
    private Type type; 
    public enum Type { 
     A ("abc"), 

     B ("xyz"), 

     C ("pqr"); 

     private final String str; 

     private Type(final String str) { 
      this.str = str; 
     } 

     @Override 
     public String toString() { 
      return str; 
     } 
    } 

    public Type getType() { 
     return type; 
    } 

    public void setType(final String type) { 
     for (Type s: Type.values()) { 
      if (s.toString().equalsIgnoreCase(type)) { 
       this.type = s; 
      } 
     } 
    } 
} 

컨트롤러 :

public ModelAndView execute(final HttpServletRequest request, @ModelAttribute final UploadFormBean uploadFormBean) { 
    //some code. 
    Type t = uploadFormBean.getType(); //t is null. 
    //some more code. 
} 

JSP : 내가 놓친 게 무엇

<input type="hidden" name="type" value="abc"> 

. 정보가 필요한지 알려주십시오. 모든 도움에 감사드립니다.

+0

UploadFormBean 클래스 코드를 게시 하시겠습니까? – RE350

+0

열거 형은 어디에 있습니까? JSP에서 어디에서 사용됩니까? 컨트롤러에서 어디에서 사용됩니까? "일할 수 없다"고 말할 때, 당신은 무엇을 의미합니까? 무슨 일이 일어날 것으로 예상됩니까? 실제로는 어떻게됩니까? "일부 코드"부품 중 하나라도 질문과 관련된 내용을 변경하거나 설정하는 경우 게시해야합니다. – RealSkeptic

+0

@ RE350 관련 코드를 추가했습니다. –

답변

0

문제는 기본 스프링 MVC 속성 편집기 abc가 제출 매핑하는 방법을 확인할 수 있다는 것입니다 작동, 직접 Enum지도

private String type; 

에 양식 빈 유형을 변경할 수 없습니다 HTTP 요청을 Type.A으로 보내주십시오. 열거 형에 대한 기본 동작은 문자열 값을 열거 형으로 변환하는 것입니다. abc이라는 열거 형 값을 찾을 수 없으므로 null으로 제한됩니다.

자신 만의 PropertyEditor을 작성하여이를 극복 할 수 있습니다.

public class TypeEditor extends java.beans.PropertyEditorSupport { 
    @Override 
    public void setAsText(String text) throws IllegalArgumentException { 
    if(text != null) { 
     text = text.trim(); 
     if(text.equalsIgnoreCase("abc")) { 
     setValue(Type.A); 
     } 
     else if(text.equalsIgnoreCase("xyz")) { 
     setValue(Type.B); 
     } 
     else if(text.equalsIgnoreCase("pqr")) { 
     setValue(Type.C); 
     } 
    } 
    } 
} 

java.lang.String에서 Type 값을 얻을 수있는 열거 클래스 Type의 메소드를 만드는 것이 더 나을 수 있습니다. 속성 편집기 코드는 이후에 단순화되며 열거 형 값의 변경 사항은 Type 클래스로 현지화됩니다.

그런 다음이 편집기를 컨트롤러 클래스의 웹 바인더에 추가하십시오.

@Controller 
public class MyController { 
    @InitBinder 
    public void initBinder(WebDataBinder binder) { 
    binder.registerCustomEditor(Type.class, new TypeEditor()); 
    } 
} 
0

당신은

+0

수정 사항을 확인하고 변경 사항이 있는지 확인하십시오. 왜 이것이 가능하지 않은지 알려주십시오. 모든 문서가 도움이됩니다. –

관련 문제