Struts 2 필기―8.유형 전환
내 장 된 형식 변환기 와 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 과 같은 맵
<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 필드 로 추가 해 야 합 니 다.
본 고 는'손 끝 이 가볍게 날 아 다 니 는'블 로그 에서 나 왔 으 니 전재 하 는 것 을 사절 합 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
apache struts2 취약점 검증이번에는 보안 캠프의 과제였던 apache struts2의 취약성에 대해 실제로 손을 움직여 실행해 보고 싶습니다. 환경 VirtualBox에서 브리지 어댑터 사용 호스트:macOS 10.12 게스트:ubuntu 1...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.