zoukankan      html  css  js  c++  java
  • 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.总结、教训。

    通过这个小项目,我学到了新的知识,但是发现控制台没有输出我想要的结果,要注意编码时要将字段名写的一致,避免后面获取不到对象的属性。

  • 相关阅读:
    分库分表的技术演进
    Mybatis传递多个参数
    tomcat实现热部署的配置
    名为'<Cursor Name>'的游标已存在
    ABP示例程序-使用AngularJs,ASP.NET MVC,Web API和EntityFramework创建N层的单页面Web应用
    ABP官方文档翻译 10.1 ABP Nuget包
    ABP官方文档翻译 9.3 NHibernate集成
    ABP官方文档翻译 9.2 Entity Framework Core
    ABP官方文档翻译 9.1 EntityFramework集成
    ABP官方文档翻译 8.2 SignalR集成
  • 原文地址:https://www.cnblogs.com/arriw/p/5453891.html
Copyright © 2011-2022 走看看