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

When submitting multiple values, execute() method doesn't run

本文关键字:方法 运行 execute 提交      更新时间:2023-09-26

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

当我刚刚提交code=001时,

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

我能够使用request.getParameter("code");

Action类的execute()方法中检索此值

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

var code='001';
var values='Title:The Boy, Type:Mandatory';
document.forms[0].action='test.action?code='+code+'&values='+values;

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

谁能告诉我这里出了什么问题?我不明白.....

谢谢

我不确定你想用javascript做什么。但是我们可以这样做让struts2为你工作

在action类中创建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内置的拦截器堆栈将尝试在您的action类中查找具有名称代码,值的属性,并且由于您已经为这些属性指定了setter方法,struts2将尝试设置这些属性中的值。

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

供参考:

Struts2提供了一种干净的方式来分离你的代码从底层的Servlet API,所以没有必要使用request.getParameter()ActionContext.getContext()作为框架将为你做所有这些工作,并提供你的一切在你的动作类在干净的方式

这是为我工作的代码

<<p> JSP/strong>
<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

也许我没有很好地理解你的问题,但我猜你正在寻找这个

<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",那么你只能发送一个变量