【问题标题】:How to send Object from JavaScript to Action class in Struts 2?如何将对象从 JavaScript 发送到 Struts 2 中的 Action 类?
【发布时间】:2014-01-21 01:34:21
【问题描述】:

在我的 Action 类中,我有一个 POJO 类的对象。

public class ConfigureTspThresholdAction extends
    ActionSupport implements SessionAware, ModelDriven<GmaThresholdParameter>{

    private Map<String,Object> session;

    private String circleId;
    private String tspId;
    private String thresholdTypeFlag;

    GmaThresholdParameter gmaThresholdParameters = new GmaThresholdParameter();

GmaThresholdParameter 也是这里的 POJO(我的 Entity 类),它有各种成员,我想从用户那里获取其值。

我在我的 JSP 中的文本字段中获取用户填写的值:

JSP:

<s:div id="thresholdParametersDiv" cssStyle="display: none">
<table>
    <tr>
        <td>Minimum Number of OG Calls</td>
        <td><s:textfield id="thresholdParameter_1"
                name="minNumberOc"
                onkeypress="return isNumber(event,'thresholdParameter_1')"></s:textfield></td>
    </tr>
    <tr>
        <td>Minimum Duration of OG Calls (in secs)</td>
        <td><s:textfield id="thresholdParameter_2"
                name="minDurationOc"
                onkeypress="return isNumber(event,'thresholdParameter_2')"></s:textfield></td>
    </tr>
    <tr>
        <td>Maximum Number of IC Calls</td>
        <td><s:textfield id="thresholdParameter_3"
                name="maxNumberIc"
                onkeypress="return isNumber(event,'thresholdParameter_3')"></s:textfield></td>
    </tr>
    ..........similarly other textfileds
</table>

文本字段中有name 属性,其值是我想要填充的GmaThresholdParameter 的成员变量。

现在,我想从这些文本字段中提取值并将我的 GmaThresholdParameter gmaThresholdParameters = new GmaThresholdParameter(); 填充到我的 Action 类中。

对于其他原始变量,我通过 getter/setter 填充它们,并以与 Action 类中相同的名称发送我的 AJAX 调用,例如:

JS:

$.ajax({
    type: 'POST',
    traditional: true,                  
    url: '/gma/updateThresholdParameters.action',
    data:
    {
        circleId: circleId,
        tspId: tspId,
        thresholdTypeFlag: thresholdTypeFlag,

        // HERE I want to send my GmaThreshholdParameter object. How to send it so that it fills my object in action class ?
    }

我想将我的 GmaThreshholdParameter 对象从 JavaScript 发送到 Action 类。如何发送它以填充我在动作类中的对象?

我应该从数组中的 textfileds 收集值并发送它还是创建一个 JavaScript Object 以从映射 Java POJO 对象的 JavaScript 发送对象? 有什么解决办法吗?

【问题讨论】:

  • 我不明白您为什么需要从 javascript 发送对象?如果要发送所有值,请使用data : $("#form_id").serialize(),

标签: java javascript ajax jsp struts2


【解决方案1】:

尝试在 Struts2 操作中为 gmaThresholdParameters 定义 getter 和 setter。

然后,在你的 javascript 中,试试这个:

...
data:
{
   circleId: circleId,
   tspId: tspId,
   thresholdTypeFlag: thresholdTypeFlag,
   "gmaThresholdParameters.property1": whateverValueProperty1,
   "gmaThresholdParameters.property2": whateverValueProperty2,
   "gmaThresholdParameters.property3": whateverValueProperty3, 
   ...
}
...

如果您为 gmaThresholdParameters 对象定义了一个空的构造函数,并为其属性定义了 getter 和 setter,它应该正确填充它。

【讨论】:

  • 这意味着我将不得不为我的 Action 类保留 7 个新成员和 7 个 getter setter,而现在我只有 gmaThresholdParameters 对象的 getter/setter。没有别的办法吗?
  • 不,不,Struts2 允许您保持动作结构不变。这个想法是它允许您访问对象内部操作的嵌套属性,可从您的 HTML 表单访问为“object.property1”、“object.property2”等。您在操作中需要的唯一更改是其已发布属性的 getter 和 setter,以及整个 gmaThresholdParameters 对象的 getter 和 setter。反过来,它需要 getter 和 setter(在 GmaThresholdParameter.java 中定义)用于它想要发布的每个属性。
  • 你可以通过代码发布,因为我无法理解。目前我有一个用于整个 gmaThresholdParameters 对象的 getter 和 setter。
  • 那么你不需要更多的代码更改,而是在 javascript 中。试试我放在那里的javascript sn-p,看看它是否能正确填充你的阈值参数对象的属性
  • 由于我正在为 gmaThresholdParameters 对象实现模型驱动,因此“property1”:whateverValueProperty1 在这里应该足够了???
【解决方案2】:

您可以在构造data 对象时从文本字段中获取值。只要您实现 ModelDrivenmodelDriven interceptor ,因为它被引用,您不需要指定嵌套属性的路径,因为它们位于 valueStacktop 上。

data:
{
    circleId: circleId,
    tspId: tspId,
    thresholdTypeFlag: thresholdTypeFlag,

    minNumberOc: $("#thresholdParameter_1").val(),
    minDurationOc: $("#thresholdParameter_2").val(),
    maxNumberIc: $("#thresholdParameter_3").val()

}

【讨论】:

    猜你喜欢
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    相关资源
    最近更新 更多