머리말
Struts2에서 변환기를 타이핑하는 이유는 무엇입니까?
: struts2는 Java의 8 개의 원본 유형과 문자열 및 날짜와 같은 일반적인 유형에 대해서만 자동 변환을 제공 할 수 있습니다.
그러나 페이지 데이터를 Javabean에 통합하려면 이것은 우리의 요구를 충족시킬 수 없습니다. 작업을 수행 할 때 조치를 취하는 것은 객체 이므로이 요구 사항을 사용하려면 유형 변환기를 사용해야합니다.
대부분의 경우, 내장형 유형 변환기 및 Struts2 프레임 워크가 제공하는 Ognl 기반 유형 변환기를 사용하여 대부분의 유형 변환 요구를 충족시킬 수 있습니다. 그러나 지정된 형식의 문자열을 복합 객체로 변환해야하고 사용자 정의 유형 변환기가 필요할 수있는 특별한 경우가 있습니다. 예를 들어, 클라이언트가 "Jelly | 123456"과 같은 문자열을 서버로 보내면이 문자열을 사용자 이름으로 "jelly"를 사용자 이름으로, "123456"으로 사용자 암호로 변환해야합니다.
사용자 정의 유형 변환 클래스
다음과 같은 프론트 데스크 페이지가 있습니다.
<form action = "login"method = "post"> user : <input type = "text"name = "userInfo"> <br> <input type = "value ="convert "> </form>
해당 조치 코드는 다음과 같습니다.
개인 사용자 사용자; // 이것은 화합물 유형 개인 문자열 팁; public void setUsers (user user) {this.user = user;} public user getUser () {return user;}사용자가 "username | password"형식으로 전경 페이지에서 문자열을 입력하고 사용자 지정 유형 변환기를 통해 "사용자 이름 | 비밀번호"형식으로 문자열을 사용자 유형으로 변환하기를 바랍니다. 사용자 정의 유형 변환기를 구현하는 방법에 대해 이야기 해 봅시다.
Struts2의 유형 변환기는 실제로 Ognl 프레임 워크를 기반으로합니다. OGNL 프로젝트에는 TypeConverter 인터페이스가 있으며 사용자 정의 유형 변환기에서 구현 해야하는 인터페이스입니다. 이 인터페이스의 정의 코드는 다음과 같습니다.
// Ognl 제공 공용 인터페이스 타이프 콘버터 제공 {public Object ConvertValue (맵 컨텍스트, 객체 대상, 멤버 멤버, 문자열 속성 이름, 개체 값, 클래스 totype);}유형 변환기를 구현하려면 위의 타입 콘버터를 구현해야하지만 위의 인터페이스의 메소드는 너무 복잡하므로 Ognl 프로젝트는이 인터페이스에 대한 구현 클래스도 제공합니다. 사용자 정의 유형 변환기를 구현하려면 DefaultTypeConverter 클래스의 ConvertValue 메소드를 재정의해야합니다.
다음은 사용자 클래스 인스턴스로 변환 된 변환 클래스입니다.
공개 클래스 USERCONVERTER 확장 DEFAULTTYPECONVERTER {public Object ConvertValue (MAP CONTEXT, OBJECT VALUE, CLASS TOTYPE) {if (TOTYPE == USER.CLASS) {// 문자열을 사용자 유형으로 변환 해야하는 경우 // 시스템의 요청 매개 변수는 스트링 배열 문자열 [] Params = (문자열 []) 값입니다. // 사용자 인스턴스 생성 사용자 user = 새 사용자 (); // 요청 매개 변수 배열의 첫 번째 배열 요소 만 처리하고 문자열을 '|'와 함께 두 줄로 나눕니다. 기호 문자열 [] uservalues = params [0] .split ( "// |"); // user user user.setName에 값을 할당합니다 (uservalues [0]); user.setpassword (uservalues [1]); 리턴 사용자; } else if (toType == string.class) {// 사용자 유형을 문자열 user = (사용자) 값으로 변환 해야하는 경우; "<" + user.getName () + "|"를 반환합니다. " + user.getPassword () + ">"; } return null; }}ConvertValue 메소드의 기능은 매우 간단합니다. 이 방법은 유형 변환을 완료하는 데 도움이되지만이 변환은 양방향입니다. 대상 유형은 매개 변수 TOTYPE를 기반으로 판단 된 다음 두 방향으로 변환 로직을 구현할 수 있습니다.
유형 변환기를 등록하십시오
struts2 프레임 워크는 이러한 유형 변환기를 언제 사용 해야하는지 알지 못하므로 유형 변환기를 사용하는 것만으로는 충분하지 않으므로 유형 변환기는 웹 애플리케이션에 등록되어야하므로 Struts2 프레임 워크는이 유형 변환기를 정상적으로 사용할 수 있습니다.
struts2는 주로 유형 변환기를 등록하는 다음 두 가지 방법을 지원합니다.
유형 변환기를 등록하는 위의 두 가지 방법에 대해 이야기 해 봅시다.
로컬 유형 변환기
Struts2를 사용하면 개발자가 로컬 유형 변환 파일을 통해 유형 변환에 대한 구성 정보를 지정할 수 있습니다. 유형 변환 파일은 일반 속성 (*.properties) 파일입니다. 로컬 유형 변환 파일의 파일 이름은 ActionName -Conversion.Properties 양식에 있어야합니다. 여기서 ActionName 은이 유형의 파일로 변환 해야하는 작업 이름이며 다음 -Conversion.Properties 문자열은 고정 된 부분입니다. 유형 변환 파일은 액션 클래스 파일과 동일한 위치에 배치해야합니다.
로컬 유형 변환 파일에 대해 이야기 한 후 등록 된 로컬 유형 변환기에 대해 계속 이야기 해 봅시다. 로컬 유형 변환기를 등록하려면 로컬 유형 변환기 파일에 다음 구성 줄을 추가하면됩니다.
<propname> = <converterClass>
위의 <propname>을 유형으로 변환 해야하는 속성으로 바꾸고 <counderclass>를 유형 변환기의 구현 클래스로 바꾸십시오. 위에서 구현 된 UserConverter 클래스의 경우 다음과 같이 로컬 유형 변환 파일에서 구성해야합니다.
# 사용자 속성을 지정하려면 UserConverter 클래스를 사용하여 유형 변환 사용자 = com.jellythink.practise.userconverter를 완료해야합니다.
글로벌 유형 변환기
로컬 유형 변환기의 한계는 너무 명백하며 지정된 작업 및 지정된 속성 만 작업 할 수 있습니다. 그러나 응용 프로그램의 여러 작업에 사용자 유형의 속성이 포함되어 있거나 하나의 작업에 여러 사용자 유형의 속성이 포함 된 경우 전역 유형 변환기를 사용하는 것이 더 적절합니다.
글로벌 유형 변환기는 지정된 동작의 지정된 속성이 아니라 지정된 유형에서 작동하지 않습니다. 예를 들어, com.jellythink.practise.user 유형의 모든 속성에 대해 작동합니다.
글로벌 유형 변환기를 등록하면 xwork-conversion.properties 파일을 제공해야합니다.이 파일은 글로벌 유형 변환기 파일입니다. 웹 응용 프로그램의 웹 -INF/클래스 경로 아래에 파일을 직접 배치해야합니다.
글로벌 유형 변환 파일 내용은 여러 <proptype> = <convertClass> 항목으로 구성됩니다. PropType를 유형 변환 해야하는 유형으로 바꾸고 ConvertClass를 유형 변환기의 구현 클래스로 바꾸십시오. 위에서 구현 된 UserConverter 클래스의 경우 다음과 같이 글로벌 유형 변환 파일에서 구성해야합니다.
com.jellythink.practise.user = com.jellythink.practise.userconverter
"로컬"대 "글로벌"
로컬 유형 변환은 지정된 동작의 지정된 속성 만 변환 할 수 있습니다. 동작의 속성이 배열인지 수집 유형인지 여부에 관계없이 변환기의 변환 메소드는 속성을 한 번만 변환합니다. 작업에 목록 <user> 속성 사용자가있는 경우 로컬 유형 변환기는 convertValue () 메소드를 한 번만 호출하여 사용자 요청 매개 변수를 한 번에 목록 <user> 수집 객체로 변환합니다.
글로벌 유형 변환기는 모든 동작 특정 유형을 변환합니다. 액션의 속성이 배열 또는 수집 유형이고 배열 또는 수집 요소가 변환기를 변환하는 메소드 인 경우 글로벌 유형 변환기는 전체 세트 속성을 변환하지 않지만 세트 속성의 각 요소를 변환합니다. 즉, 속성이 배열 또는 컬렉션 인 경우 배열 또는 컬렉션에는 유형의 여러 요소가 포함되면 ConvertValue () 메소드가 여러 번 호출됩니다.
둘 사이의 차이에 익숙해지면 미래의 작업에서 더 많은주의를 기울일 것입니다. 특히 배열과 세트 요소를 변환 할 때 설정된 요소의 차이.
struts2를 기반으로하는 사용자 정의 유형 변환기
위의 내용은 DefaultTypeConverter 클래스를 상속하여 변환 방향을 소개합니다. ConvertValue 메소드에서 변환 방향은 TOTYPE 매개 변수를 판단하여 판단 한 다음 다른 변환 방향에 대한 변환 로직이 별도로 구현됩니다. struts2 프레임 워크에서 유형 변환기의 구현을 단순화하기 위해 strutStypeConverter Abstract 클래스가 특별히 제공되는데, 이는 DefaultTypeConverter 클래스의 서브 클래스입니다. DefaultTypeConverter 클래스의 ConvertValue 메소드를 구현했습니다. 이 메소드를 구현할 때는 ConvertValue 메소드의 TOTYPE 매개 변수를 다음과 같은 두 가지 방법을 호출하는 것으로 판단하여 두 가지 방향으로 변환을 전환합니다.
우리가해야 할 일은 strutstypeconverter의 초록 클래스를 상속하고 두 가지 추상적 인 방법 인 ConvertfromString과 ConvertToString을 구현하는 것입니다.
수정 된 코드는 다음과 같습니다.
public class userconverter 확장 strutStypeConverter {public Object ConvertFromString (map context, string value, class toclass) {user user = new user (); 문자열 [] uservalues = value [0] .split ( "// |"); user.setName (uservalues [0]); user.setpassword (uservalues [1]); 리턴 사용자; } public string convertOstring (map context, object o) {// 사용자 유형을 문자열 사용자로 변환 해야하는 경우 (사용자) o; "<" + user.getName () + "|"를 반환합니다. " + user.getPassword () + ">"; }}요약
이 기사는 struts2의 사용자 정의 유형 변환기를 상세하게 요약하고 전체 아이디어는 다음과 같습니다.
사용자 정의 유형 변환기를 완성하는 데 몇 단계 만 있습니다.
좋아, 위는이 기사의 전체 내용입니다. 이 기사의 내용에 모든 사람의 연구 나 작업에 대한 특정 참조 가치가 있기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다. Wulin.com을 지원 해주셔서 감사합니다.