在Struts2中,Action是能夠攜帶數據的,而且是線程安全的.咱們能夠經過Jsp頁面的Form表單向Action傳遞數據.這主要有兩種方式:java
①在Action中組裝javaBean的屬性到對象.安全
JSP頁面:ide
- <s:form action="loginAction">
- <s:textfield label="UserName" name="user.userName" />
- <s:textfield label="Password" name="user.password"/>
- <s:textfield label="Email" name="user.email"/>
- <s:submit />
- </s:form>
Action中代碼測試
- private User user;
- public User getUser() {
- return user;
- }
- public void setUser(User user) {
- this.user = user;
- }
- @Override
- public String execute() throws Exception {
- if(StringUtils.isBlank(user.getUserName())
- || StringUtils.isBlank(user.getPassword())
- || StringUtils.isBlank(user.getEmail()))
- {
- return "failed";
- }
- if(userService.validateUserRegistered(user))
- {
- return "registerTipPage";
- }
- return SUCCESS;
- }
在Result頁面要訪問userName屬性,也須要寫user.userName.this
②ModelDriven 方式spa
實例以下:(Java代碼)prototype
- @Controller("loginAction")
- @Scope("prototype")
- public class LoginAction extends ActionSupport implements ModelDriven<User> {
- private User user = new User();
- public User getModel() {
- // TODO Auto-generated method stub
- return user;
- }
- }
在JSP頁面的訪問方式以下:線程
- <s:form action="loginAction">
- <s:textfield label="UserName" name="userName" />
- <s:textfield label="Password" name="password"/>
- <s:textfield label="Email" name="email"/>
- <s:submit />
- </s:form>
須要說明的是使用ModelDriven Action,有如下幾點須要注意:orm
在Action的方法中,不要再進行建立相應的對象的操做,即便手動建立了相應的對象,並對這個對象進行賦值,在顯示時,也會只顯示原來從頁面接收的數據.例如:對象
測試的Java代碼
- @Override
- public String execute() throws Exception {
- user = new User();
- user.setPassword("zhangsan");
- user.setUserName("zhangsan");
- user.setEmail("zhangsan@sina.cn");
- if(StringUtils.isBlank(user.getUserName())
- || StringUtils.isBlank(user.getPassword())
- || StringUtils.isBlank(user.getEmail()))
- {
- return "failed";
- }
- if(userService.validateUserRegistered(user))
- {
- return "registerTipPage";
- }
- return SUCCESS;
- }
在這段代碼中,但願將從用戶表單提交過來的數據進行修改,因而從新建立了一個User實例,看Jsp頁面的測試結果:
點擊提交後,按原來的意圖,但願出現UserName,zhangsan等信息,但實際以下:
仍是原來表單提交的數據.若是改爲這樣,就OK了
- @Override
- public String execute() throws Exception {
- // user = new User();
- user.setPassword("zhangsan");
- user.setUserName("zhangsan");
- user.setEmail("zhangsan@sina.cn");
- if(StringUtils.isBlank(user.getUserName())
- || StringUtils.isBlank(user.getPassword())
- || StringUtils.isBlank(user.getEmail()))
- {
- return "failed";
- }
- if(userService.validateUserRegistered(user))
- {
- return "registerTipPage";
- }
- return SUCCESS;
- }
結果以下:
因此在使用ModelDriven模式時,必定要注意如下幾點