2010-07-19 88 views
0

我正在使用Wicket 1.4.9 + Spring 3 + iBatis。我想在使用事务之前获取会话数据,但是我遇到了一个很大的问题,因为这些数据放在Wicket Web会话中(此数据在登录页面上选择)。如何使用aop处理每个客户端的Wicket会话

我正在使用spring aop进行点删除,但是我无法为每个客户端指定切割会话。如何解决这个问题呢。

用户类实体

package com.app.entity; 

import java.io.Serializable; 
import java.util.Date; 

public class User implements Serializable { 

    private String name; 
    private String lastname; 
    private String username; 
    private String password; 
    private String crtUser; 
    private Date crtDate; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getLastname() { 
     return lastname; 
    } 

    public void setLastname(String lastname) { 
     this.lastname = lastname; 
    } 

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public String getCrtUser() { 
     return crtUser; 
    } 

    public void setCrtUser(String crtUser) { 
     this.crtUser = crtUser; 
    } 

    public Date getCrtDate() { 
     return crtDate; 
    } 

    public void setCrtDate(Date crtDate) { 
     this.crtDate = crtDate; 
    } 

} 

Web应用程序类

package com.app.conf; 

import org.apache.wicket.Page; 
import org.apache.wicket.Request; 
import org.apache.wicket.Response; 
import org.apache.wicket.Session; 
import org.apache.wicket.protocol.http.WebApplication; 
import org.apache.wicket.spring.injection.annot.SpringComponentInjector; 

import com.app.page.UserLoginPage; 

public class WebApp extends WebApplication { 

    @Override 
    protected void init() { 
     addComponentInstantiationListener(new SpringComponentInjector(this)); 
    } 

    @Override 
    public Class<? extends Page> getHomePage() { 
     return UserLoginPage.class; 
    } 

    @Override 
    public Session newSession(Request request, Response response) { 
     return new CustomSession(request); 
    } 

} 

自定义会话类

package com.app.conf; 

import org.apache.wicket.Request; 
import org.apache.wicket.protocol.http.WebSession; 

import com.app.entity.User; 

public class CustomSession extends WebSession { 

    private User user; 

    public CustomSession(Request request) { 
     super(request); 
    } 

    public User getUser() { 
     return user; 
    } 

    public void setUser(User user) { 
     this.user = user; 
    } 

} 

用户登录页面:保持会话时登录

package com.app.page; 

import org.apache.wicket.ajax.AjaxRequestTarget; 
import org.apache.wicket.ajax.markup.html.form.AjaxButton; 
import org.apache.wicket.markup.html.WebPage; 
import org.apache.wicket.markup.html.form.Form; 
import org.apache.wicket.markup.html.form.PasswordTextField; 
import org.apache.wicket.markup.html.form.TextField; 
import org.apache.wicket.model.PropertyModel; 

import com.app.conf.CustomSession; 
import com.app.entity.User; 

public class UserLoginPage extends WebPage { 

    private LoginForm form; 

    public UserLoginPage() { 
     form = new LoginForm("form"); 
     add(form); 
    } 

    private class LoginForm extends Form{ 

     private User user; 

     private TextField<String> username; 
     private PasswordTextField password; 
     private AjaxButton submitButton; 

     public LoginForm(String id) { 
      super(id); 

      user = new User(); 

      username = new TextField<String>("username", 
        new PropertyModel<String>(this, "user.username")); 
      add(username); 

      password = new PasswordTextField("password" , 
        new PropertyModel<String>(this, "user.password")); 
      add(password); 

      submitButton = new AjaxButton("submitButton", this) { 

       @Override 
       protected void onSubmit(AjaxRequestTarget arg0, Form<?> arg1) { 
        getCustomSession().setUser(user); 
        setResponsePage(new UserAddPage()); 
       } 
      }; 
      add(submitButton); 
     } 
    } 

    public CustomSession getCustomSession(){ 
     return (CustomSession)getSession(); 
    } 

} 

用户添加页面:我想切点上插入服务类方法,并得到会议的附加创建用户和用户创建日期实体类

package com.app.page; 

import org.apache.wicket.ajax.AjaxRequestTarget; 
import org.apache.wicket.ajax.markup.html.form.AjaxButton; 
import org.apache.wicket.markup.html.WebPage; 
import org.apache.wicket.markup.html.form.Form; 
import org.apache.wicket.markup.html.form.PasswordTextField; 
import org.apache.wicket.markup.html.form.TextField; 
import org.apache.wicket.model.PropertyModel; 
import org.apache.wicket.spring.injection.annot.SpringBean; 

import com.app.entity.User; 
import com.app.service.IUserService; 

public class UserAddPage extends WebPage { 

    @SpringBean private IUserService userService; 

    private UserAddForm form; 

    public UserAddPage() { 
     form = new UserAddForm("form"); 
     add(form); 
    } 

    private class UserAddForm extends Form { 

     private User user; 

     private TextField<String> name; 
     private TextField<String> lastname; 
     private TextField<String> username; 
     private PasswordTextField password; 
     private AjaxButton submitButton; 

     public UserAddForm(String id) { 
      super(id); 
      user = new User(); 

      name = new TextField<String>("name", 
        new PropertyModel<String>(this, "user.name")); 
      add(name); 

      lastname = new TextField<String>("lastname" , 
        new PropertyModel<String>(this, "user.lastname")); 
      add(lastname); 

      username = new TextField<String>("username", 
        new PropertyModel<String>(this, "user.username")); 
      add(username); 

      password = new PasswordTextField("password" , 
        new PropertyModel<String>(this, "user.password")); 
      add(password); 

      submitButton = new AjaxButton("submitButton", this) { 

       @Override 
       protected void onSubmit(AjaxRequestTarget arg0, Form<?> arg1) { 
        /* 
        * HOW TO POINT CUT THIS METHOD AND GET SESSION BEFORE INSERT 
        */ 
        userService.insert(user); 
       } 
      }; 
      add(submitButton); 
     } 

    } 

} 

用户看点

package com.app.aop; 

import org.aspectj.lang.ProceedingJoinPoint; 
import org.aspectj.lang.annotation.Around; 
import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.Pointcut; 

import com.app.entity.User; 

@Aspect 
public class UserAspect { 

    @Pointcut("execution(* com.app.service..*.insert*(..))&&" + "args(user)") 
    public void userPointcut(User user){} 

    @Around("userPointcut(user)") 
    public Object aroundUser(ProceedingJoinPoint pj, User user) throws Throwable{ 
     /* 
     * How to get Create User from Session 
     */ 
     return pj.proceed(); 
    } 

} 
+0

这很有趣,如果你提供一些更多的信息,我会很乐意给它一个镜头。什么是数据,何时创建,何时创建会话,您需要什么。你为什么不展示你迄今为止尝试过的一些示例代码? – 2010-07-21 15:10:56

+0

帮帮我!为解决这个问题 – suchai 2010-07-28 13:56:10

回答

0

WebApp.getSession( ).getUser()?

我想象你想注册一个bean在春天的上下文,可以提供授权用户。这可以从您的WebApp会话中检索用户(WebApp实例也将是注册的bean,但我认为它已经)。春季文档/社区中应该有大量关于此用例的信息。

为了得到更好的答案,你应该清理你的问题(使用代码块)并陈述用例。