提交多个值时,execute()方法不会运行

时间:2011-12-10 06:49:01

标签: javascript struts2 request action http-request-parameters

我需要提交一些值作为请求参数(通过javascript),我需要在我的Action类中使用。我能够以这种方式发布一些数据并在Action类中检索。但现在它似乎没有用。

当我提交code=001时,

document.forms[0].action='test.action?code='+code; 

我可以使用execute()

Action课程的request.getParameter("code");方法中检索此值

但是,当我尝试提交两个值时:

var code='001';

var values='Title:The Boy, Type:Mandatory';

document.forms[0].action='test.action?code='+code+'&values='+values;

在这种情况下,调用甚至没有进入execute方法(我在execute方法中有一个sysout)。

有人可以告诉我这里有什么问题吗?我不明白.....

由于

2 个答案:

答案 0 :(得分:0)

我不确定你要使用javascript做什么。但是这里是我们可以做的让struts2为你工作

在您的操作类中创建2个属性

   private String code
   private String values
// create there getter and setter outside of execute method

现在当你提交例如你的案件的价值时

 localhost:8080/Com/test.action?code=1001&values=FUEL:PETROL, POWER:KW, Wheel 
Configuration:4X2, CABIN:SINGLE CAB, TRANSMISSION:FULLY AUTOMATIC, Steering: LHD
拦截器堆栈中的struts2构建将尝试使用名称代码,动作类中的值来查找属性,并且由于您已经为这些属性指定了setter方法,因此struts2将尝试在这些属性中设置值。

在尝试设置属性时,它会查看您为属性指定的数据类型,内置系统将查找它具有的开箱即用类型转换器,并将尝试根据您的要求转换数据类型。 如果它有类型转换器它将为你工​​作,否则将抛出一个异常,它无法将给定的值转换为指定的值。

供参考:

Struts2提供了一种将代码与基础Servlet API分开的简洁方法,因此无需使用request.getParameter()ActionContext.getContext(),因为框架将为您完成所有这些工作并为您提供一切在你的动作类中以干净的方式

这是为我工作的代码

<强> JSP

<script type="text/javascript">
function test(){

    var code='001';

    var values='values=FUEL:PETROL, POWER:KW, Wheel Configuration:4X2, CABIN:SINGLE CAB, TRANSMISSION:FULLY AUTOMATIC, Steering: LHD';
     var value='demo.action?code='+code+'&values='+values;;
     alert(value);
    document.demo.action=value;
    document.demo.submit();

}
</script>
</head>
<body>
<form action="" id="demo" name="demo" method="post">
<input type="button" onclick="test()">

</form>

这是Action类

private String code;
private String values;

public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getValues() {
        return values;
    }

    public void setValues(String values) {
        this.values = values;
    }
 public String execute(){
      System.out.println("**************************"+code);
      System.out.println(values);
 }

这是控制台输出

**************************001
FUEL:PETROL, POWER:KW, Wheel Configuration:4X2, CABIN:SINGLE CAB, 
TRANSMISSION:FULLY AUTOMATIC, Steering: LHD

答案 1 :(得分:0)

可能我不太了解你的问题,但我猜你正在寻找这个

<s:url id="urlid" action="anyaction" escapeAmp="false">
       <s:param name="param1">value1</s:param>
       <s:param name="param2">value2</s:param>
 </s:url>

如果你没有设置escapeAmp =“false”,那么你只能发送一个变量。