struts2怎么向jsp传递参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2怎么向jsp传递参数相关的知识,希望对你有一定的参考价值。

1、浏览器往Action传递参数:
在Action中设置属性,并为属性设置get/set方法。传递参数时按照属性的名字赋值即可。如xxx?name=aa
取值用request.getPrameters("属性名“);
public class UserAction
private String name;
private User user;
public String userAdd()
System.out.print(user.getName());
System.out.print(name);
return "success";

public String getName()
return name;

public void setName(String name)
this.name = name;

public User getUser()
return user;

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



注:struts2不会使用单例模式,因此每次的请求都是new 一个新对象。
2、Action 往浏览器界面传递参数:
方式有三种:
第一种:直接给Action 属性(有get/set方法)赋值 ,JSP中用
<s:property value="OGNL表达式"/> 取值,注意返回结果类型为forward
例如:
<s:property value="name"/>
<s:property value="user.name"/>
第二种:通过ActionContext传值,在Action中所调用的方法中加入:
ActionContext.getContext().put("key", "value");

JSP中用<s:property value="#key"/>取值
第三种:通过request、session 传值。Action方法中通过取得HttpervletRequest 、HttpSession 和 Map对象设置值,
例如:
ServletActionContext.getRequest().setAttribute("arg0", "value");
ServletActionContext.getRequest().getSession().setAttribute("arg0", "value");
ActionContext.getContext().getSession().put("key", "value");
参考技术A 这问得,struts2不是只向jsp返回结果,jsp获取使用么.
1,jsp提交页面信息到struts2中,处理之后可以把sturts2中的对象(一般是这样保存)保存.
2,一般都会保存到session中,有时候也会保存到valuestack中
3,在jsp页面使用struts2中保存的结果 使用标签获取,也可以用request获取
4,使用标签<s:property value=""> 或者是$session.
参考技术B struts2:
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("name", 参数);
jsp:
Object object=request.getAttribute("name");
参考技术C

通过request、session 传值。Action方法中通过取得HttpServletRequest 、HttpSession 和 Map对象设置值,

例如:

ServletActionContext.getRequest().setAttribute("arg0", "value");  
ServletActionContext.getRequest().getSession().setAttribute("arg0", "value");  
ActionContext.getContext().getSession().put("key", "value");

参考技术D java代码 session.setAttribute("loginUserName", user.getUsername());
这样设置后可以在jsp中进行获取
jsp代码 $sessionScope.loginUserName
第5个回答  2017-02-03 把参数放到作用域里面,在jsp中用EL表达式接收

如何将参数从JSP传递给Struts 2动作

我有一个应用程序,我想每次按下该项目的按钮时将项目id传递给操作。

我的JSP:

<s:submit  value="addToCart" action="addToCart" type="submit">
<s:param name="id" value="%{#cpu.id}" />
</s:submit>

行动:

public class ProductsCPU extends BaseAction implements Preparable, SessionAware {
private static final long serialVersionUID = 2124421844550008773L;

private List colors = new ArrayList<>();
private List cpus;
private String id;

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

当我将id打印到控制台时,它具有null值。问题是什么?

答案

这应该做:

<s:url id="myurl" action="addToCart">
    <s:param name="id" value="%{#cpu.id}" />
</s:url>
<s:submit  value="addToCart" action="%{myurl}"/>
另一答案

您需要使用表单元素。

<form action="passId>
    <s:hidden name="id" value="%{#cpu.id}" />
    <s:submit  value="addToCart" action="addToCart" type="submit"/>
</form>
另一答案

问题是你不能使用s:submit标签中的s:param标签在param标签中使用submit标签进行参数化。

您也不想添加hidden字段,因为您有多个值提交给操作。这是因为许多隐藏字段都使用相同的名称进行渲染。在提交表单之前,您只能使用一个字段并更新其值。

可能您使用了错误的标记将参数传递给操作。您可以使用锚标记并使用param标记对其进行参数化。

第二种方法是使用javascript来修改action属性。这样你也可以使用button标签。

不建议使用第三种方法,因为它需要为每个链接使用多个表单。通过这种方式,您可以直接向表单操作属性添加参数。

以下是上述选项的代码。

3-in-1:

<s:form name="myForm13" namespace="/" action="save?message=Hello param 3" theme="simple">
  <br/><s:a cssClass="btn btn-primary" action="test"><s:param name="message">Hello param 1</s:param>&nbsp;&nbsp;&nbsp;Go&nbsp;&nbsp;&nbsp;</s:a>
  <br/><s:a href="#" cssClass="btn btn-warning" onclick="myForm13.action='test?message=Hello param 2';myForm13.submit()">Submit</s:a>
  <br/><s:submit cssClass="btn btn-danger" action="test"/>    
</s:form>

以上是关于struts2怎么向jsp传递参数的主要内容,如果未能解决你的问题,请参考以下文章

Struts2 注解方式@Result传递参数给其他Action

JAVA后台 关于如何从后台传递信息在jsp前端

(转)JSP向后台传递参数的四种方式

jsp怎么获取超链接作为参数来传递,怎么写?怎么获取?

SpringMVC 学习 十一 springMVC控制器向jsp或者别的控制器传递参数的四种方法

怎么从servlet传递一个值,然后在一个jsp页面得到这个值