form表单action传值,form表单的action属性的主要作用
使用form表单进行前后台传值
例如通过提交表单进行更新操作,原生表单的写法如下:
方法1:
对应的controller中update action的传值是:
或
方法2:
对应的controller中update action的传值是:
或
方法3:
由于form中引用了@user这个实例变量,那么其中的
等价于方法2的写法,这时候就需要透过user去取值,传到后台的params其实是hash套user的hash的格式,
对应的controller中update action的传值是:
或
方法4.
和方法3不同在于@user是一个实例变量,而如果用 :user 则是指向user这个model进行增删改查,因此还可以写成:
这里我们用的是 f 去遍历form_for中每个字段,因此写法和上面三种原生的form表单略有不同
由于在form_for中指定了user这个model,因此我们需要透过user去取name,age的值,传到后台的params其实是hash套user的hash的格式,
对应的controller中update action的传值是:
或
1.params.permit(:name)这样的写法是只有一层,那么直接可以通过params[:name]来获取name的值;而params.require(:user).permit(:name)是有两层关系,需要通过params[:user][:name]才能获取name的值
2.使用f.text_field传值和input传值方式有所不同
(1)用input获取后台的值
(2)用f.text_field获取后台的值
两者的区别在于value=后面跟的是字符串"%=@user.user_name%",可以用字符串拼接的方法;而value: 后面不跟字符串而是直接用@user.user_name获取栏位中的内容
如果不确定传到后台的params是什么格式,那么可以使用pry加入断点来看
form中action的传值
会,不管是get还是post的,只要name一样,传到servlet里的都是数组。
form表单提交action 如何接收
struts2中的Action接收表单传递过来的参数有3种方法:
如,登陆表单login.jsp:
form action="login" method="post" name="form1"
用户名:s:textfield name="username"/br/
密 码:s:password name="password"/br/
s:submit value="提交"/
/form
1.在Action类中定义表单属性,两者属性名称必须一致。提供setter,getter方法。即可接收到表单传过来的参数.
这种接收参数的方法,方便简单,但是结构性不是很好,且当表单传递来的参数很多的时候,整个Action类中充斥着setter,getter方法,程序结构不是很美观。
2.把表单传递过来的参数封装成一个类,然后调用其中的属性. 如,把login.jsp页面要传来的参数进行封装
Private String username;
private String password;
public String
getUsername() { return username; }
public void setUsername(Stringusername) { this.username = username; }
public String getPassword(){ return password; }
public void setPassword(String password) {this.password = password; }
然后再Action方法中,定义该类的对象就可以了,
如 public class loginAction extends ActionSupport{
private Users users;
Public Users getUsers(){ return users; }
public void setUsers(Users users){ this.users=users; } }
通过这种方法传值,还必须在jsp页面做一下处理,login.jsp中from1的属性名应该改成这样: 登陆表单login.jsp:
form action="login" method="post" name="form1"
用户名:s:textfield name="users.username"/br/
密 码:s:password name="users.password"/br/
s:submit value="提交"/
/form
这种方法,在struts开发中是很常用的一种方法!
3.通过实现ModelDriven接口接收表单数据(还没有用过,可以尝试。)
首先Action类必须实现ModelDriven接口,同样把表单传来的数据封装起来,Action类中必须实例化该对象,并且要重写getModel()方法
public class loginAction extends ActionSupport implements
ModelDrivenUsers{
private Users users =new Users();
public Users getModel(){ return users; }
}
form的action中怎么传参数
第一种情况:
上面表单的action属性不写时,直接点击“提交”按钮,会触发表单的提交事件,此时,通过火狐浏览器的控制台可以发现:
消息头中有如下关键信息:(1)请求地址后面通过'?'传递参数(2)请求方式为GET
From表单中的传值有那几种方法?
from表单传值的方法有post和get两种。
POST方法一般用来向目的服务器发出更新请求,并附有请求实体。GET一般用来传参数。
POST和GET的区别:
第一个:
GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以相连,如:login.action?name=seanpassword=123。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。
POST把提交的数据则放置在是HTTP包的包体中。
第二个:
POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。上面“安全”的含义仅仅是不作数据修改,而这里安全的含义是真正的Security的含义,比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存,(2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击。
总结一下,Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求,在FORM(表单)中,Method默认为"GET",实质上,GET和POST只是发送机制不同,并不是一个取一个发!