在Wicket程式用Spring,要在web.xml加入設定:

<context -param>
 <param -name>contextConfigLocation</param>
 <param -value>/WEB-INF/spring*.xml</param>
</context>

<listener>
 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

在WebApplication中要建立SpringComponentInjector:

public class BasicApplication extends WebApplication {
 @Override
 protected void init() {
 super.init();
 addComponentInstantiationListener(new SpringComponentInjector(this));
 }
}

如果還想把bean注入WebSession,要用InjectorHolder:

public class BasicSession extends WebSession {
 public BasicSession(Request request) {
 super(request);
 InjectorHolder.getInjector().inject(this);
 }
}

設定好之後,只要在需要注入bean的地方用@SpringBean即可,範例如下:

public class SignUpPage extends BasePage {
 @SpringBean
 private UserService userService;

 public SignUpPage() {
 add(new SignUpForm("signUpForm"));
 }

 class SignUpForm extends Form {
 private String name;

 private String email;

 private String password;

 @SuppressWarnings("unused")
 private String confirmPassword;

 public SignUpForm(String id) {
 super(id);
 PasswordTextField passwordField, confirmPasswordField;
 add(new TextField("name", new PropertyModel(this, "name")).setRequired(true).add(new StringValidator.LengthBetweenValidator(2, 32)));
 add(new TextField("email", new PropertyModel(this, "email")).setRequired(true).add(EmailAddressValidator.getInstance()));
 add(passwordField = new PasswordTextField("password", new PropertyModel(this, "password")));
 add(confirmPasswordField = new PasswordTextField("confirmPassword", new PropertyModel(this, "confirmPassword")));
 add(new EqualPasswordInputValidator(passwordField, confirmPasswordField));
 }

 @Override
 protected void onSubmit() {
 User user = new User(name, email, password, User.ROLE_USER);
 try {
 userService.createUser(user);
 setResponsePage(HomePage.class);
 } catch (DuplicatedUserNameException e) {
 error(getLocalizer().getString(getId() + ".nameTaken", getWebPage(), "User's name is taken: " + name));
 } catch (DuplicatedUserEmailException e) {
 error(getLocalizer().getString(getId() + ".emailTaken", getWebPage(), "User's email is taken: " + email));
 }
 }
 }
}
文章標籤
全站熱搜
創作者介紹
創作者 Forth 的頭像
Forth

不就是個blog

Forth 發表在 痞客邦 留言(0) 人氣(170)