strus2学习笔记

1、定义一个action需要继承ActionSupport

    1.1、ActionSupport继承了 Action, Validateable, ValidationAware, TextProvider, LocaleProvider接口.

Action提供了一些String常量,如:ERROR,INPUT,LOGIN,NONE,SUCCESS

Validateable定义了一个validate()方法,如果action继承它,可以获得这个方法

ValidationAware提供了判断获取错误和保存错误的方法:

 boolean hasActionMessages()
 void setFieldErrors(Map<String, List<String>> errorMap);
 Map<String, List<String>> getFieldErrors();
 void addActionError(String anErrorMessage);
 void addFieldError(String fieldName, String errorMessage);

TextProvider提供了获取本地消息的方法String getText(String key, String defaultText)

 2、基本验证

如果一个action继承了ActionSupport并且继承了默认栈则可以实现基本验证

首先workflow拦截器会检查action中是否实现了validate方法(通过Validateable接口暴露方法),实现了则运行validate方法,如果产生了错误,则会调用ValidationAware接口定义好的保存错误的方法,

validate方法没有返回值,所以当该方法运行完之后,workflow拦截器会检查验证过程中是否产生了错误,如果产生了,则停止向下一个拦截器递归,返回input指定的page页面

 protected String doIntercept(ActionInvocation invocation) throws Exception {
        Object action = invocation.getAction();

        if (action instanceof ValidationAware) {
            ValidationAware validationAwareAction = (ValidationAware) action;

            if (validationAwareAction.hasErrors()) {//判断是否有错误
                if (LOG.isDebugEnabled()) {
                    LOG.debug("Errors on action " + validationAwareAction + ", returning result name 'input'");
                }

                String resultName = inputResultName;

                if (action instanceof ValidationWorkflowAware) {
                    resultName = ((ValidationWorkflowAware) action).getInputResultName();
                }

                InputConfig annotation = action.getClass().getMethod(invocation.getProxy().getMethod(), new Class[0]).getAnnotation(InputConfig.class);
                if (annotation != null) {
                    if (!annotation.methodName().equals("")) {
                        Method method = action.getClass().getMethod(annotation.methodName());
                        resultName = (String) method.invoke(action);
                    } else {
                        resultName = annotation.resultName();
                    }
                }




你可能感兴趣的:(error,接口,action)