2011-06-17 24 views
5

sonra 2 eylem değişkenleri doldurulmadı Benim Sorun eylemin değişkenleri invocation.invoke kullanarak interceptor'dan tetiklendikten sonra popüle edilmemesidir.Struts Interceptor'ın invocation.invoke()

public String intercept(ActionInvocation invocation) throws Exception { 

    final ActionContext context = invocation.getInvocationContext(); 
    HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST); 
    HttpSession session = request.getSession(true); 
    Object user = session.getAttribute(Constants.USER_HANDLE); 

    if (user == null) { 
     String signUp = request.getParameter(Constants.SIGN_UP); 

     if (!StringUtils.isBlank(loginAttempt)) { 
      if (processLoginAttempt(request, session)) { 
       return "login-success"; 
      } 
     } else if (!StringUtils.isBlank(signUp)) { 
      return invocation.invoke(); 
     } 
     return "login"; 
    } else { 
     return invocation.invoke(); 
    } 
} 

Struts XML dosyası: Ne ben biliyorum bir dinleyiciye kullanmadan önce, bu (i form göndermiş bir .jsp itibaren ve bir eylem olarak adlandırılır ve her değişken doldurulan) düzgün çalıştı

keseni sınıfı olmasıdır :

<package name="defaultPackage" extends="struts-default"> 

    <interceptors> 
     <interceptor name="login" class="com.spiddan.LoginInterceptor" /> 
     <interceptor-stack name="defaultStack"> 
      <interceptor-ref name="login"/> 
     </interceptor-stack> 
    </interceptors> 

    <default-interceptor-ref name="defaultStack"/> 
    <default-action-ref name="index"/> 

    <global-results> 
     <result name="login" type="redirect">/logIn.jsp</result> 
     <result name="login-success" type="redirect">index</result> 
    </global-results> 

    <action name="addUserAction" class="com.spiddan.action.UserAction" method="addUser"> 
     <result name="input">/logIn.jsp</result> 
     <result name="success">/index.jsp</result> 
     <result name="error">/error.jsp</result> 
    </action> 

Eylem sınıfı:

public class UserAction extends ActionSupport implements ModelDriven { 

private User user; 
private int tempGender; 
private String confirmPassword; 
private UserDAO userDAO; 
private PasswordEncrypter passwordEncrypter; 

public Object getModel() { 
    return getUser(); 
} 

public String addUser() throws Exception { 

} 

//Getter and setters ect 

Zaman ayırdığınız için teşekkürler!

cevap

8

Kodunuzda yalnızca özel önleyicinizi belirttiniz ve diğer tüm Struts2 varsayılan engelleyicilerini hariç tuttunuz. Bunu yerine deneyin:

<interceptors> 
    <interceptor name="login" class="com.spiddan.LoginInterceptor" /> 
    <interceptor-stack name="defaultStackModified"> <!-- name doesn't override existing defaultStack--> 
     <interceptor-ref name="defaultStack"/>  <!-- include the defaultStack this way--> 
     <interceptor-ref name="login"/> 
    </interceptor-stack> 
</interceptors> 
İlgili konular