Action屬性接收參數


一、action的屬性(地址欄傳參)接收參數:如果使用的JDK屬性不一致,則會使得傳值無法實現。 解決辦法: 1.系統自身需要用到的JDK(window——>屬性——>Java——>Installed JREs——>選擇符合條件的JDK版本)

2.設置JDK級別(項目右鍵——>屬性——>Java Compiler——>Compiler compliance level——>選擇符合條件的級別)

3.Tomcat下的JDK版本(Window——>屬性——>MyEclipse——>sever——>tomcat——>JDK)

二、使用例子驗證其傳值的方法:

1.新建項目 ParamInputAction——>新建類“UserAction”,並設置兩個屬性userName、password。在此需要遵循Java的規則(屬性首字母要小寫,類名首字母大寫,不要亂用不符合常規的名字)

package cn.cqvie.paraminput;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport { /** * */ private static final long serialVersionUID = 1L; private String userName; private String password;

public String insert() { System.out.println("userName=" + userName); System.out.println("password=" + password); return SUCCESS; }

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; } }

2.配置index.jsp頁面屬性,用超鏈接使得在地址欄將其兩個參數傳過去。這里的“!”表示user中將要被調用的方法(定義方法:?屬性=值&屬性=值)

此處賦值:userName=admin,password=123。

<body> 運用action屬性接收參數<a href=user/user!insert?userName=admin&password=123>添加用戶</a>    </body>

3.配置struts.xml頁面。使得action的動作去尋找相應的方法。

<struts> <constant name="struts.devMode" value="true" /> <package name="user" extends="struts-default" namespace="/user"> <action name="user" class="cn.cqvie.paraminput.UserAction" >        <result>/user_insert_success.jsp</result>     </action> </package> </struts>

4.由上可知,需要創建user_insert_success.jsp頁面,以顯示頁面跳轉結果。

<body>    User Insert Success!   </body>

5.運行、調試

部署項目,開啟服務,打開瀏覽器,輸入相應的項目名。

訪問首頁結果如上,點擊超鏈接“添加用戶”

由結果可知,地址欄里有之前定義的兩個屬性及對應的值,已經一並傳到了user_insert_success.jsp頁面,由控制台結果顯示傳值成功。

 6.總結、教訓。

1)學會了該種賦值方法,簡潔明了:user/user!insert?userName=admin&password=123(package/action name!action要調用的方法?屬性=值&屬性=值)

2)需要注意的是屬性的名字要與先前定義的一致,避免后面傳值的時候混淆,以至於傳值失敗。

3)需要熟練運用該種賦值方法,雖然經常看見“!、?”等寫法但是並沒有真正明白其中的寓意,還需要加強練習,以便掌握。

 

三、用Action 的整個對象接收參數

1.基於上個項目,新建一個beans類 User,並設置它的三個屬性。

package cn.cqvie.beans;

public class User { private String name; private String password; private String confimingPassword; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getConfimingPassword() { return confimingPassword;

} public void setConfimingPassword(String confimingPassword) { this.confimingPassword = confimingPassword; } }

2.新建UserAction繼承至ActionSupport.此時定義的User user是整個對象,而非它擁有的各個屬性,注意引入beans 包才能識別User。

package cn.cqvie.paraminput.model;

import cn.cqvie.beans.User;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport { private User user;

public String insert() {

System.out.println("name:"+user.getName()); System.out.println("Password:"+user.getPassword());

return SUCCESS; }

public User getUser() { return user; }

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

3.同樣的方法配置struts.xml文件的內容:只需改動class即可。

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <constant name="struts.devMode" value="true" />  <package name="user" extends="struts-default" namespace="/user"> <action name="user" class="cn.cqvie.paraminput.model.UserAction" > <result>/user_insert_success.jsp</result> </action> </package> </struts>

4.為了有一個較好的用戶體驗效果,需要建立一個登陸界面login.jsp,使用戶自己輸入登陸信息。需要注意到的是name和password一定要用(對象.屬性)的方法來獲取。

 注:基於實踐用此種方式是否傳值成功,所以登陸的用戶名及密碼沒有進行驗證,有漏洞。

<body> <form action="user/user!insert" method="post"> 用戶名稱:<input type="text" name="user.name"><br> 密&nbsp;&nbsp;碼:<input type="password" name="user.password"><br> 確認密碼:<input type="password" name="user.password"><br> <input type="submit" value="登錄"> </form> </body>

5.當用戶點擊“登錄‘按鈕時,需要有一個頁面顯示登錄結果:user_insert_success.jsp ,在這里只是顯示了用戶登錄名;注意引入EL標簽庫。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body> 登錄成功,歡迎<c:out value="${user.name}"></c:out>! </body> </html>

6.運行、調試

在瀏覽器地址欄輸入項目名/login.jsp,訪問登錄界面

輸入相應的用戶名、密碼、以及確認密碼。

點擊“登錄”

可以發現表單提交到action,訪問UserAction的insert方法,切換到后台可以發現輸出了用戶的用戶名和密碼。

 

7.總結、教訓。

1)struts是通過set方法傳參的,所以需要注意編碼時要將字段名寫的一致,避免后面獲取不到對象的屬性。

2)用DTO(Data Transfer Object)數據傳輸對象,可以避免重寫大量的屬性,直接用model將對象封裝到entity,再用(該對象 . 屬性)的方法即可訪問到。

3)由於重點在於實踐action屬性對象傳參,所以此程序有較大漏洞,比如當我輸入的”密碼“與“確認密碼”不一致,也會跳轉到登錄成功界面,顯示登錄成功,因為沒有做登錄名和密碼的驗證。

4)通過這個小項目,我學到了新的知識,之前登錄界面的action跳轉的方式是user/user.action,可以跳轉成功,但是發現控制台沒有輸出我想要的結果,也就說明並沒有訪問到“insert”方法,后來才又改了代碼,使得“login.jsp”的action="user/user!insert" 直接訪問“insert”方法;結果證明我成功了,控制台輸出了結果。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM