ActionSupport 클래스를 상속하여 행동 개발이 완료됩니다. ActionSupport 클래스는 단순히 ACTION 인터페이스를 구현할뿐만 아니라 검증 및 현지화에 대한 지원을 추가합니다. 실제 개발의 사용자 정의 작업은이 클래스를 물려받을 필요가 있습니다. 사용자 로그인에 양식 확인 기능을 추가하십시오
ActionSupport 클래스의 역할 :
struts2는 Struts 기본 클래스 또는 Struts 인터페이스를 상속하기 위해 설계된 액션 클래스를 요구하지 않지만, 우리 자신의 동작의 구현을 용이하게하기 위해 Com.opensymphony.xwork2.actionsupport 클래스를 상속 하고이 클래스에서 공개 문자열 Execute () 예외를 대체합니다. 이 클래스에는 실질적인 변명이 많기 때문에 국제 정보 방법, 사용자 요청 처리를위한 기본 방법 등을 포함하여 많은 기본 방법이 제공되어 Acion의 개발을 크게 단순화 할 수 있습니다. struts2에서 동작은 일반적으로 HTTP 요청 매개 변수를 캡슐화하는 데 직접 사용됩니다. 따라서 조치 클래스에는 요청 매개 변수에 해당하는 속성도 포함되어야하며 속성에 해당하는 getter 및 setter 메소드를 제공해야합니다.
그렇다면 액션 인터페이스와 ActionSupport 클래스의 차이점은 무엇입니까?
액션 인터페이스는 다음과 같습니다.
public static final string success = "success"; public static final string none = "none"; public static final string error = "error"; public static final string login = "login"; public string execute ()는 예외를 던집니다.
5 개의 정적 상수가 있고 리턴 유형 문자열이있는 Execute ()가 있음을 알 수 있습니다.
ActionSupport Tool Class는 Action Interface를 구현하는 것을 기준으로 Validate () 메소드도 정의합니다. 메소드가 재정의되면 execute () 메소드 전에 실행됩니다. 확인이 실패하면 입력으로 전송됩니다. 작업을 구성 할 때는 입력 속성을 구성해야합니다.
또한 ActionSupport는 GetText (String Key) 메소드를 제공하고 국제화를 실현하여 리소스 파일에서 국제화 정보를 얻습니다.
이러한 방식으로 태그를 사용자 정의 할 때 변수를 새로운 ActionSupport 객체로 정의하여 국제화를 달성 할 수 있습니다.
ActionSupport 클래스는 (소스 코드)를 가지고 있습니다.
공개 집단 업적 업포트는 행동, 유효한, 유효성 검사 구원, 텍스트 프로그램, LocalEprovider, Serializable, {Protected Static Logger = LoggerFactory.getLogger (ActionSupport.class); 개인 최종 ValidationAwaresupport validationAware = 새로운 ValidationAwaresUpport (); 개인 TextProvider Container (Private TextOctioner 컨텐츠); errormessages) {validationAware.setActionErrors (errormessages);} public collection <string> getActionErrors () {return validationAware.getActionErrors ();} public void setActionMessages (collection <string> 메시지) {validationAware.SetActionMessages (} public collection <string> getActionMessages (getActionMessages) validationAware.getActionMessages ();}@wamberatedPublic Collection <string> getErrorMessages () {return getActionErrors ();}@wamberatedPublic Map <String, list <string>> getErrors () {return getFielderrors ();} public void setfielderrors (map <string, list>> errormap). {validationAware.setfielderrors (errormap);} public map <string, list <string>> getFielderrors () {return validationAware.getFielderrors ();} public locale getLocale () {ActionContext CTX = ActionContext.ettContext (); if (ctx! {if (log.isdebugenabled ()) {log.debug ( "Action Context Not 초기화");} return null;}} public boolean haskey (string key) {return getTextProvider (). haskey (key);} public String getText (String AtextName) {returnextprovider (); getText (String atextName, String defaultValue) {return getTextProvider (). getText (atextName, defaultValue);} public String getText (String atextName, String defaultValue, String OBJ) {return getTextProvider (). getText (atextname, defaultValue, obj);} atextname, list <?> args) {return getTextProvider (). getText (atextName, args);} public String getText (String key, String [] args) {return getTextProvider (). getText (key, args); getTextProvider (). getText (atextName, defaultValue, args);} public String getText (String key, String defaultValue, String [] args) {return getTextProvider (). getText (key, defaultValue, Args); getTextProvider (). getText (key, defaultValue, args, stack);} public String getText (String key, String defaultValue, String [] args, valuestack stack) {return getTextProvider (). getText (key, defaultValue, args, stack); = ActionContext.getContext (). getConversionErrors (); if (conversionerrors.containskey (expr)) {string [] vals = (string []) converionerrors.get (expr); return vals [0];} else {final valuestack valuestack = action context.gettontext (). getvaluestack (). Valuestack.findValue (expr); return getText (key, arrays.aslist (val));}} public resourcebundle getTexts () {return getTextProvider (). getTexts ();} public resourceBundle getTexts (String AbundLename) {returnextprovider (abbedlenxts); addActionError (String anerRormessage) {validationAware.addactionError (anerrormessage);} public void addactionMessage (string avoid admationMessage) {validationAware.addactionMessage (Amessage);} public void addfielderror (문자열 필드 이름, 문자열 오류); 입력 ()은 예외 {return input;} public string dodefault ()를 예외 {return success;} public string execute () 예외 {return success {return success;} public boolean hasactionErrors () {return validationAware.hasactionErrors ();} public boopalean hasactionMessages () {return validationAware.hasationSerates (); hasaptionsations () <<<<hasaptionsations () validationaware.haserrors ();} public boolean hasfielderrors () {return validationAware.hasfielderrors ();} public void clearfielderrors () {validationAware.clearFielderrors ();} public void clearActionErrors () {validationAware.clearActionErrors (); {validationAware.clearMessages();}public void clearErrors() {validationAware.clearErrors();}public void clearErrorsAndMessages() {validationAware.clearErrorsAndMessages();}public void validate() {}@Overridepublic Object clone() throws CloneNotSupportedException {return super.clone ();} public void avause (string result) {} private textProvider getTextProvider () {if (textProvider == null) {textProviderFactory tpf = new TextProviderFactory (); if (Container! = null) {null) {null) {null) {null); this);} return textProvider;}@injectpublic void setContainer (컨테이너 컨테이너) {this.container = 컨테이너;} 당신은 그것에 많은 방법이 있다는 것을 알 수 있지만, 우리는 우리가 잘 알고있는 방법, validate () 및 데이터 확인 방법이 있음을 분명히 알 수 있습니다. 이 메소드를 통해 로그인 할 때 프롬프트를 작성하거나 사용자 이름과 비밀번호가 비어 있거나 기타 ...
이제 간단한 예를 들으십시오. 사용자 이름과 비밀번호가 비어 있으면 고객에게 친숙한 프롬프트를 제공하십시오.
다음은 Struts 2의 데이터 검증 기능을 설명하는 두 가지 방법입니다.
1. 코딩 메소드 검증
1) 조치는 ActionSupport에서 상속되어야합니다
2) 요청 처리 방법을 확인할 공개 void validexxx () 메소드를 작성하고 메소드 내에서 양식 데이터 검증을 수행하십시오.
3) 모든 요청 처리 방법에 대한 공개 void validate () 메소드를 작성할 수도 있습니다.
4) 확인 방법에서 addfielderror () 메소드를 통해 필드 검증 오류 메시지를 추가 할 수 있습니다.
5) 확인이 실패하면 Struts 프레임 워크가 이름 입력으로 결과 페이지로 자동 이동합니다. 확인 실패 페이지에서 <s : fielderror/>를 사용하여 오류 메시지를 표시 할 수 있습니다.
6) 단순하고 유연합니다. 그러나 그것은 그다지 재사용 할 수 없습니다
유효성 검사 메소드를 다시 작성하십시오
1. 우리가 쓴 조치는 일반적으로 상속 및 ActionSupport를 상속 받고 ActionSupport는 ACTION 인터페이스를 구현할뿐만 아니라 유효한 인터페이스를 구현하여 데이터 검증 기능을 제공합니다. Validatable 인터페이스에서 유효성 검사 메소드를 정의하고 검증 양식 입력 필드에서 오류가 발생하면 ActionSupport 클래스의 필드러 필드에 오류를 추가 한 다음 Ognl 표현식을 통해 출력하십시오.
다음은 사용자 로그인 확인 인터페이스입니다.
<body> <%-출력 검증 정보-%> <%-단일 프롬프트를 원한다면 <s : fielderror fieldname = "uname"/>-%> <%-<s : property value = ""/>-%> <div style = "color : red"> <s : fielderror/> </div> <s : form name = "form1"namestpace = ""post " action = "loginValidAteAction"> <s : div> 사용자 이름을 입력하십시오 : <s : 텍스트 필드 이름 = "user.uname"> </s : textfield> </s : div> <s : div> 비밀번호를 입력하십시오 : <s : <s : "user.upwd">/s : password> </s : div> <s : dredin "> </s : comper> <%-dedec". -%> <s : debug> </s : debug> </body>
사용자가 데이터를 입력 한 후 LoginValidateAction에 데이터를 제출하십시오.
공개 클래스 loginValidateAction은 ActionSupport empless action {public user; public map <string, object> map; // 확인 메소드가 모든 동작에서 작동합니다 @Override public void validate () {if (user.getUname (). length ( "Uname", "User Name!");}; if (user.getUpwd (). length () == 0) {addfielderror ( "upwd", "password a vimp emption!");}} // 비즈니스 public string execute ()를 처리하는 메소드는 예외를 던집니다. {system.out.println (user.getUname ()); if (user.getUname (). equals ( "admin") & user.getUpwd (). equals ( "admin")) {// struts2 맵 콜렉션 맵을 주입하자 입력; // 이것은 입력되어야합니다}}/*** @Return 사용자*/public user getUser () {return user;}/*** @param 사용자를 설정하는 사용자*/public void setUser (user user) {this.user = user;} 위의 loginValidateAction 클래스는 유효성 검사 메소드를 대체합니다.이 방법은 Excute 방법을 실행하기 전에 실행됩니다. 메소드를 실행 한 후 액션 클래스의 제출자에 데이터 확인 오류가 포함되어 있으면 요청이 입력 논리보기로 전달됩니다.
struts.xml은 다음과 같이 구성됩니다.
<!-데이터 검증-> <action name = "loginValidAteAction"> <!-결과가 "성공"되면 성공할 때 성공. jsp 페이지-> <result name = "success"> success.jsp </result> <!-결과가 "오류"인 경우 jsp 페이지로 점프하거나 loginvalidaction.jsp </renget = "intogin.jsp-> rengin valideact. 이름 = "로그인"> fail.jsp </result> <result name = "error"> fail.jsp </result> </action>
클라이언트에 미치는 영향 :
그러나 오류가 촉발되면 우리가 원하는 효과가 아님을 알았습니다.
이것은 우리가 원하는 것이 아니므로 어떻게 바꿀 수 있습니까? 실제로 이것은 주로 Struts2 테마 스타일을 보여줍니다.
다시 한번 봅시다 :
자동으로 스타일을 추가합니다. struts2는 ajax, simple, xhtml의 세 가지 테마를 제공합니다. 기본적으로 xhtml 테마로 표시됩니다. 물론, 당신은 우리가 사용자 정의 테마라고 부르는 자신의 테마를 쓸 수 있습니다. 위의 문제는 설정하여 해결할 수 있습니다
그것을 해결하는 방법에는 두 가지가 있습니다.
1. 간단한 방법 (실용적, 모든 struts2 태그의 경우)은 struts.xml에 다음 코드 줄을 추가하십시오.
<constant name = "struts.ui.theme"value = "simple" />
그것은 모든 페이지가 간단한 테마를 사용한다는 것을 의미합니다. 현재 IT 출력 페이지는 테이블 TD 등과 같은 불필요한 코드를 추가하지 않으며 다른 편집 페이지와 같이 페이지 스타일을 편집 할 수 있습니다.
오류 프롬프트 형식을 살펴 보겠습니다
우리는 다음과 같은 태그를 설정할 수 있습니다.
<s : 속성 값 = "errors.uname [0]"/>
이 태그를 주석하십시오.
<div style = "color : red"> <s : fielderror/> </div>
그러나 우리가 이렇게 설정하면이 효과가 발생합니다.
이 효과는 일반적으로 오류를 입력 할 때 프롬프트와 비슷하며 다른 속성 값이 있으므로 하나씩 나열 할 필요가 없습니다.
struts2를 사용한 검증 프레임 워크
XML 구성 확인.
인코딩하기 전에 실행됩니다.
1) 액션 클래스가 확인 되려면 동일한 패키지 아래에서 Action Class Name-Validation.xml이라는 확인 규칙 파일을 작성하십시오.
2) 검증 규칙 파일에 확인 규칙을 추가하십시오. 특정 확인 장치 이름에 대해서는 struts2 또는 struts2의 API 참조를 참조하십시오.
a) 필드 검증 : 액션 클래스에서 각 비 초기 유형 필드를 확인하기위한 규칙.
<field name = "필드 이름 확인"> <field-validator type = "inuler name"short-circuit = "short path verification (default is false)"> <paramer name = "value </param> <message> 검증이 실패 할 때 신속한 메시지 </field-validator> </field-validator를 추가 할 수 있습니다.
b) 비 필드 검증 : 액션 클래스의 특정 필드에 대한 조합 검증에 Ognl 표현식을 사용하십시오.
<validator type = "FieldExpression"> <param name = "fieldName"> pwd </param> <param name = "fieldName"> pwd2 </param> <param name = "expression"> <!
c) 방문자 확인 : 주로 액션 클래스에서 사용자 정의 유형 필드를 확인하는 데 사용됩니다. (모델 구동 모드 사용)
i) 조치 클래스의 확인 규칙 파일에서 사용자 정의 유형 필드에 대한 방문자 확인 규칙을 사용하십시오.
<!-사용자 정의 필드에 방문자 검증을 사용합니다-> <필드 이름 = "사용자"> <필드-밸리 디터 유형 = "필수"짧은 회로 = "true"> <메시지> Ussage Information 필수 </message> <!-메시지 접두사-> </field-validator> <field-validator type = "visitor"> <!-Param으로 지정하십시오. 이름 = "context"> usercontext </param> <!-이 방문자 확인의 컨텍스트 이름을 지정합니다-> <param name = "appendprefix"> true </param> <!-확인 실패 메시지의 접두사를 추가할지 여부 </message> <!-메시지 prefix-> </field-validator> </field-validator>
ii) 방문자 필드에 대한 검증 규칙 파일을 작성하십시오. 파일 이름은 다음과 같습니다. 예를 들어 :이 예제의 파일 이름은 user-usercontext-validation.xml입니다.
참고 :이 파일은 방문자 필드 유형이있는 패키지에 저장되어야합니다.
iii) 방문자의 필드 확인 규칙 파일에서 필드를 확인할 수있는 검증 규칙을 추가합니다.
유효성 검사 메소드를 다시 작성하지 않고 확인 구성 파일을 추가하여 데이터 확인을 수행 할 수도 있습니다. 이 확인 구성 파일은 struts2에서 기존 확인 장치를 사용하여 양식 필드의 확인을 완료합니다. 여기에서 필수 스트링 검증 장치를 예로 들어 보겠습니다. 이 검증 장치는 특정 양식 필드를 입력해야한다는 필수 검증 장치입니다.
다음은이 확인 구성 파일의 LoginValidateAction-Validation.xml의 쓰기 방법입니다.
<? xml version = "1.0"alcoding = "utf-8"?> <! doctype validators public "-// apache struts // xwork validator 1.0.2 // en" "http://struts.apache.org/dtds/xwork-validator-1.0.2.2.2. type = "requiredString"> <message> 사용자 이름은 비어있을 수 없습니다 </message> </field-validator> </field> <field name = "upwd"> <field-validator type = "requiredstring"> <message> 구절이 비어있을 수 없습니다 </message> </field-validator> <field-validator type = "stringlength"> <param name = "maxlength" "> maxlength" ". 이름 = "minlength"> 6 </param> <message> 통과 길이는 $ {minlength}-$ {maxlength} bits 사이에 있어야합니다 참고 :이 확인 구성 파일은 다음 두 가지 규칙을 준수해야합니다.
1. 파일의 운명 형식은 액션 클래스 이름 -validation.xml이어야합니다. 예를 들어이 예에서는 파일 이름이 다음과 같습니다. loginValidateAction-validation.xml
2. 파일은 액션 클래스의 클래스 파일과 같은 경로에 있어야합니다. 이 예에서는 파일이 있습니다
LoginValidateAction 클래스의 코드는 여전히 동일합니다.
공개 클래스 loginValidateAction은 ActionSupport empless action {public user; public map <string, object> map; // 확인 메소드가 모든 동작에서 작동합니다 @Override public void validate () {if (user.getUname (). length ( "Uname", "User Name!");}; if (user.getUpwd (). length () == 0) {addfielderror ( "upwd", "password a vimp emption!");}} // 비즈니스 public string execute ()를 처리하는 메소드는 예외를 던집니다. {system.out.println (user.getUname ()); if (user.getUname (). equals ( "admin") & user.getUpwd (). equals ( "admin")) {// struts2 맵 콜렉션 맵을 주입하자 입력; // 이것은 입력되어야합니다}}/*** @Return 사용자*/public user getUser () {return user;}/*** @param 사용자를 설정하는 사용자*/public void setUser (user user) {this.user = user;}위는 Struts 2 데이터 검증 기능 및 편집기가 도입 한 검증 문제에 대한 솔루션입니다. 모든 사람에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 모든 사람에게 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!