Struts 2 필기―8.유형 전환

브 라 우 저 서버 간 의 데이터 통신 은 풍부 한 데이터 형식 이 있 을 수 없습니다.실제로 http 인 자 는 모두 문자열 형식 입 니 다.따라서 서버 에서 데이터 형식 변환 을 완료 해 야 합 니 다.Struts 2 는 강력 한 내장 변환 메커니즘 을 가지 고 있 으 며,유형 변환 은 OGNL 표현 식 에 의존 할 수 있 습 니 다.개발 자 도 스스로 형식 변환 기 를 만 들 수 있 습 니 다.
내 장 된 형식 변환기 와 OGNL 기반 형식 변환
Struts 2 는 대부분의 일반적인 유형 전환 을 완성 할 수 있 습 니 다.OGNL 의 도움 을 받 아 Struts 2 는 다른 간단 한 방식 으로 매개 변 수 를 유형 에 맞 게 변환 할 수 있 습 니 다.예 를 들 어 폼 이 제출 해 야 할 action 에 user 형식 속성 이 있 으 면 제출 할 때 user.name 과 user.pass 를 직접 사용 하면 폼 데 이 터 를 user 인 스 턴 스 의 해당 속성 에 전달 할 수 있 습 니 다.이 방식 은 일반적인 http 요청 인자(문자열)를 일반적인 String,int 등 이 아 닌 형식 대상(user 대상)으로 바 꿀 수 있 습 니 다.데모 코드 는 다음 과 같 습 니 다.
<s:form action="lalala/login">
<s:textfield name="user.name" label="U" />
<s:textfield name="user.gender" label="gender"/>
<s:textfield name="username" label="username"/>
<s:submit value="adg"/>
</s:form>

이 폼 은 username 의 내용 을 login 의 username 속성 에 부여 하고 name 과 gender 를 login 의 user 인 스 턴 스 name 과 gender 속성 에 부여 합 니 다.
<s:property value="user.gender"/><br/>
<s:property value="user.name"/><br/>

success 보기 페이지 에서 property 탭 을 통 해 관련 속성 값 을 추출 합 니 다.
또한 login 과 같은 맵users 에 값 을 부여 하려 면 어떤 value 에 값 을 부여 하 는 지 알려 야 할 뿐만 아니 라 이 값 이 이 value 의 어떤 속성 인지 알려 야 합 니 다.예 를 들 면:
<s:form action="lalala/login">
<s:textfield name="users['1'].gender" label="gender1" />
<s:textfield name="users['1'].name" label="name1" />
<s:textfield name="users['2'].gender" label="gender2" />
<s:textfield name="users['2'].name" label="name1" />

<s:submit value="submit"/>

jsp 에서 접근 할 때:
<s:property value="users['1'].gender"/>

--------------------------------------------------
맵 을 list 로 바 꾸 면 쓰기 와 같이[]의 내용 만 다 를 뿐 입 니 다.map 의[]내용 은 value 이 고 String 형식 입 니 다.그리고 list 의[]는 숫자 이 고 int 형식 입 니 다.하지만 모두 user 대상 의 표지(id)입 니 다.
일반적인 형식 을 사용 하지 않 을 때 구 조 는 형식 변환기 로 users 속성 을 처리 할 수 없 기 때문에 부분 형식 변환 파일 이 필요 합 니 다.이 파일 은 action 과 대응 합 니 다.파일 에 서 는 action 의 특정한 속성 이 사용자 정의 형식 변환 기 를 사용 하 는 지 지정 할 수 있 을 뿐만 아니 라 이 action 의 list 요소 가 어떤 대상 형식 인지 지정 할 수 있 습 니 다.login-conversion.properties 에 다음 줄 의 코드 를 입력 하 십시오.
Element_users=com.cm.actions.user

이 코드 는 list 를 위 한 것 입 니 다.users 가 지정 한 것 은 list 의 요소 유형 입 니 다.
사용자 정의 형식 변환기
사용자 가 aaa,bb 를 입력 하고 aaa 를 action 에서 username,bb 를 user 속성의 password 로 만 들 려 면 사용자 정의 형식 변환 기 를 사용 해 야 합 니 다.사용자 정의 형식 변환 기 는 입력 한 문자열 을 미리 처리 하고 사용자 정의 방식 에 따라 인 스 턴 스 의 특정한 속성 형식 으로 변환 할 수 있 습 니 다.컨버터 는 반드시 TypeConverter 인 터 페 이 스 를 실현 해 야 한다.그러나 이 인 터 페 이 스 는 너무 복잡 해서 GONL 은 Default TypeConverter 류 를 제공 합 니 다.이것 은 이 인터페이스의 실현 류 입 니 다.사용자 정의 변환 기 는 이 종 류 를 계승 한 다음 convertValue 방법 을 다시 씁 니 다.사용자 정의 변환기 가 양 방향 형식 변환 을 완성 할 수 있 습 니 다.책의 예 는 User 가 문자열 로 바 뀔 수도 있 고 문자열 이 User 형식 으로 바 뀔 수도 있다 는 것 이다.전환 방향 을 정 하기 위해 서 는 toType 속성 을 판단 해 야 합 니 다.목표 속성 을 대표 합 니 다.String 으로 이동 하 시 겠 습 니까?User 로 이동 하 시 겠 습 니까?이 방법 에서 세 개의 매개 변 수 는 context 는 유형 전환 컨 텍스트 로 Action Context 를 변환 해 야 할 때 사용 합 니 다.value 는 변환 이 필요 한 인자 입 니 다.문자열 배열 입 니 다.toType 은 대상 형식 입 니 다.글 actioncontext 참조
상술 한 방법 은 비 틀 에 기초 한 것 이다.Struts 2 프레임 워 크 는 StrutsTypeConverter 추상 류 를 제공 하여 TypeConverter 인 터 페 이 스 를 더욱 잘 실현 하고 두 전환 방향 을 두 가지 다른 방법 으로 나 누 었 다.코드 는 다음 과 같 습 니 다:
public class userconverter extends StrutsTypeConverter {

	@Override
	public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
		user user = new user();
		String[] userValues = arg1[0].split(",");
		user.setGender(userValues[1]);
		user.setName(userValues[0]);
		// TODO Auto-generated method stub
		return user;
	}

	@Override
	public String convertToString(Map arg0, Object arg1) {
		user user = (user) arg1;
		// TODO Auto-generated method stub
		return user.getName() + user.getGender();
	}

}

converFromString 방법 에서 String 은 문자열 배열 에서 추출 되 었 음 을 알 수 있 습 니 다.왜 문자열 을 직접 사용 하지 않 습 니까?다 중 선택 상자,드 롭 다운 상자,들 어 오 는 String 등 여러 개의 입력 이 있 을 수 있 습 니 다.요청 매개 변 수 는 문자열 배열 입 니 다.
현재 user 의 두 속성 값 은 같은 문자열 로 표시 되 어 있 기 때문에 폼 을 쓸 때 는 더 이상 OGNL 표현 식 으로 aciton 의 속성 속성 을 만 들 필요 가 없습니다.action 의 속성 이름 을 직접 쓰 십시오.아래 와 같다
<s:form action="lalala/login">
<s:textfield name="user" label="U and gender" />
<s:textfield name="username" label="username"/>
<s:submit value="submit"/>

등록 형식 변환기
구조 가 언제 어떤 종류의 변환 기 를 사용 해 야 하 는 지 알려 야 하기 때문에 우 리 는 유형 변환 기 를 등록 해 야 한다.우 리 는 전역,국부 유형 변환 기 를 등록 할 수도 있 고 JDK 의 주 해 를 통 해 실현 할 수도 있다.
부분 형식 변환 기 는 부분 형식 변환 파일 을 사용 하여 지정 합 니 다.이 파일 은 대응 하 는 action 과 같은 디 렉 터 리 입 니 다.이름 규칙 에 따라 ActionName-conversion.properties.이 파일 에 다음 줄 을 추가 합 니 다:
user=com.cm.converter.userconverter

국부 변환 기 는 하나의 action 에 만 작용 합 니 다.(actionclassname 에 따라 일치 하기 때 문 입 니 다.)전역 형식 변환 기 는 여러 action 의 user 속성 이나 하나의 action 의 여러 user 속성 에 대해 형식 변환 을 할 수 있 습 니 다.WEB-INF/classes 아래 xwor-conversion.properties 파일 을 만 들 고 등록 합 니 다.이때 등록 코드 는 가방 이름 을 다 해 야 한다.
com.cm.actions.login.user=com.cm.converter.userconverter

오류 처리
표현 층 의 사용자 입력 에 오류 가 있 을 수 있 으 므 로 데이터 의 정확성 을 검증 하고 오류 처리 방법 을 제공 할 필요 가 있 습 니 다.실제로 struts 2 의 검사 와 유형 전환 은 밀접 한 관 계 를 가진다.형식 변환 전에 시스템 은 데이터 가 검 사 를 거 쳤 는 지 확인 해 야 하기 때문이다.
기본 xml 에서 conversionError 차단기 가 있 습 니 다.이 차단 기 는 변환 중의 이상 을 처리 할 수 있 습 니 다.오 류 를 폼 오류 FieldError 로 밀봉 하고 이 정 보 를 ActionContext 에 넣 습 니 다.처리 페이지(result 는 input 페이지)에서 s:fielderror 탭 을 사용 하면 오류 정 보 를 출력 할 수 있 습 니 다.이 메커니즘 을 사용 하기 위해 action 은 Action Support 클래스 를 계승 해 야 합 니 다.
잘못된 정 보 를 국제 적 으로 출력 하려 면 국제 화 자원 파일 에 key 를 xwork.default.invalid.field value 필드 로 추가 해 야 합 니 다.
본 고 는'손 끝 이 가볍게 날 아 다 니 는'블 로그 에서 나 왔 으 니 전재 하 는 것 을 사절 합 니 다!

좋은 웹페이지 즐겨찾기