Spring MVC 에서 사용자 정의 Editor 기반 폼 데이터 처리 기술 공유
예 를 들 어 날짜 형식의 호 환:
중국의 날짜 표시 습관 은 yyy-MM-dd 형식 을 사용 하고 유럽 과 미국의 습관 은 MM/dd/yyy 를 사용한다.두 가지 형식 은 모두 날짜 표시 방법 이지 만,종종 우 리 는 호 환 의 목적 을 달성 하려 면 번 거 로 운 전환 을 해 야 한다.
예 를 들 어 가격 의 호환성:
가격 은 단지 한 줄 의 숫자 일 뿐 입 니 다.우리 가 자주 사용 하 는 것 은 0.00 이라는 표현 형식 입 니 다.그리고 금액 이 비교적 큰 가격 에 대해 우 리 는 0,000.00 이라는 쉼표 로 구 분 된 가격 표현 형식 을 사용 하 는 습관 이 있 습 니 다.
사실 Spring MVC 에 서 는 이 문 제 를 고려 하여 Controller 에서 바 인 딩 을 초기 화 할 때 편집 기 를 등록 할 수 있 습 니 다.폼 이 제출 한 데이터 가 특정한 유형(심지어 특정한 매개 변수)에 비 칠 때 사용자 정의 방법 에 따라 변환 할 수 있 습 니 다.(바 이 너 리 방식 으로 전 송 된 데 이 터 를 제외 하고 우 리 는 일반적으로 전 송 된 모든 매개 변 수 는 어떤 내용 이 든 문자열 이 라 고 생각한다)
다음 에 나 는 하나의 요 구 를 허구 했다.
나 는 사용자 이름,생일,포 인 트 를 기입 해 야 하 는 양식 이 하나 있다.이 는 각각 String 타 입,Date 타 입,Long 타 입 을 대표 한다.다음은 폼 내용 입 니 다
<form action="getObj.do" method="post">
<table>
<tr>
<td> :</td>
<td><input type="text" name="userName" value="Name Test" /></td>
<td>* </td>
</tr>
<tr>
<td> :</td>
<td><input type="text" name="birthday" value="2013-3-7" /></td>
<td>* : yyyy-MM-dd MM/dd/yyyy</td>
</tr>
<tr>
<td> :</td>
<td><input type="text" name="score" value="1,000" /></td>
<td>* </td>
</tr>
<tr>
<td colspan="3"><input type="submit" value=" " /></td>
</tr>
</table>
</form>
여 기 는 폼 에 따라 다음 과 같은 폼 대상 을 비 추 었 습 니 다.이 대상 의 속성 이름 은 위 폼 의 필드 name 과 일치 해 야 합 니 다
package blog.csdn.net.chaijunkun.formObjs;
import java.util.Date;
public class UserInfo {
private String userName;
private Date birthday;
private Long score;
//getters and setters...
}
그러면 우 리 는 이러한 폼 데 이 터 를 받 고 싶 습 니 다.폼 처리 방법 을 쓸 수 있 습 니 다
package blog.csdn.net.chaijunkun.controller;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import blog.csdn.net.chaijunkun.formObjs.UserInfo;
@Controller
public class ObjController {
private static Logger logger= Logger.getLogger(ObjController.class);
public ObjController(){
logger.info(" ");
}
@RequestMapping(value="/getObj.do")
public String modifyUser(HttpServletRequest request,
HttpServletResponse response,Map<String, Object> model,
UserInfo userInfo){
logger.info(" ");
model.put("userInfo", userInfo);
return "user";
}
}
이렇게 만 쓰 면 다 중 형식 으로 호 환 되 지 않 습 니 다.날짜 와 Long 형식의 호 환 편집 기 를 써 야 합 니 다.편집 기 는 최소한 클래스 를 계승 해 야 합 니 다:java.beans.Property Editor Support.물론 Spring 에 내 장 된 편집기 도 계승 할 수 있 습 니 다.예 를 들 어 org.spring from work.beans.property editors.CustomNumberEditor 는 디지털 변환 을 처리 하 는 데 사 용 됩 니 다.어떤 것 을 계승 하 든 방법 은 같다.첫 번 째 단계:공 유 된 void setAsText(String text)방법 을 다시 씁 니 다.
두 번 째 단계:변 환 된 데 이 터 를 setValue(Object obj)로 기록 합 니 다.
다음은 날짜 가 호 환 되 는 편집기 입 니 다
package blog.csdn.net.chaijunkun.editors;
import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MyDateEditor extends PropertyEditorSupport {
@Override
/**
* text
*/
public void setAsText(String text){
Date value= null;
SimpleDateFormat sdf= new SimpleDateFormat();
sdf.applyPattern("yyyy-MM-dd");
try{
value= sdf.parse(text);
}catch(ParseException e1){
sdf.applyPattern("MM/dd/yyyy");
try {
value= sdf.parse(text);
} catch (ParseException e2) {
value= null;
}
}
//
setValue(value);
}
}
그 다음 에 롱 형 을 위 한 편집 기 를 쓰 겠 습 니 다.쉼표 로 구 분 된 것 과 쉼표 로 구 분 된 것 이 없 는 수치 표현 형식 을 지원 할 수 있 습 니 다
package blog.csdn.net.chaijunkun.editors;
import org.springframework.beans.propertyeditors.CustomNumberEditor;
public class MyLongEditor extends CustomNumberEditor {
public MyLongEditor(){
super(Long.class, true);
}
@Override
public void setAsText(String text){
if ((text== null) || text.trim().equals("")){
setValue(null);
}else{
Long value= null;
try{
//
value= Long.parseLong(text);
}catch(NumberFormatException e){
//
text= text.replace(",", "");
value= Long.parseLong(text);
}
//
setValue(value);
}
}
}
자,이 두 편집기 가 작 성 했 습 니 다.어떻게 하면 역할 을 발휘 할 수 있 습 니까?이것 은 Controller 에 데이터 변환 을 추가 할 때 바 인 딩 방법 이 필요 합 니 다
@InitBinder
public void initBinder(HttpServletRequest request, ServletRequestDataBinder binder){
binder.registerCustomEditor(Date.class, new MyDateEditor());
binder.registerCustomEditor(Long.class, new MyLongEditor());
}
위의 코드 역할 은 폼 데 이 터 를 받 으 면 Spring 에서 매개 변수 이름 이 대상 속성 과 대응 할 수 있 고 전환 하 는 유형 도 상기 코드 에 등 록 된 것 과 유사 하 며 데이터 내용 을 지정 한 편집기 에 따라 변환 하 는 것 입 니 다.우리 한번 해 보 자.
아래 그림 에서 보 듯 이
마찬가지 로 데이터 가 정확하게 식별 되 었 다.
이상 의 방법 을 통 해 우 리 는 여러 가지 데이터 형식 을 성공 적 으로 호 환 하 였 다.
뒤에 쓰기:
사실 날짜 형식 에 대해 저 는 처음에 다음 코드 처럼 호 환 을 하려 고 했 습 니 다.같은 유형 에 대해 서 는 하나의 컨트롤 러 에 하나의 편집기 만 등록 할 수 있 고 마지막 으로 등 록 된 것 이 작용 하 는 것 으로 보인다.
또한 글 을 처음 시 작 했 을 때 유형 뿐만 아니 라 특정한 유형의 특정한 속성 도 자신의 요구 에 따라 편집 기 를 맞 출 수 있 고 다른 같은 유형의 속성 에 영향 을 주지 않 는 다 고 썼 다.이것 은 매우 쉽 습 니 다.registerCustomEditor 방법 에 다시 불 러 오 는 방법 이 있 습 니 다.두 번 째 매개 변 수 는 구체 적 인 속성 이름 을 지정 할 수 있 습 니 다.이렇게 하면 입자 도 를 조절 하기 쉽다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.