1

我正在尝试提交一个 aria 模板表单http://ariatemplates.com/,提交是通过 Spring MVC 控制器/servlet 完成的。

表单正在提交,但我无法在控制器中获取 aria 元素的值,如日期选择器、文本框等。 Request.getParameter没用。

任何帮助将不胜感激。

这是我的示例 tpl 文件、js 文件和 Spring 控制器。

TPL 文件

    {Template {
    $classpath:'view.Turnover',
    $hasScript : true
}}
  {macro main()}
  <form action="test.do" method="POST" id="turnoverform">
  <div style="float:left;padding-top: 3em;padding-bottom: 3em;padding-right: 3em;">
    {@aria:Div {
       sclass : "basic",
       width : 740,
       height : 300
       }}

        <p style="font-family:Arial,Helvetica,sans-serif;font-size: medium;">Create Turnover Report</p>
        <hr />

        {@aria:DatePicker {
            label: " begin date:",
            labelWidth:190,
            width:330,
            helptext:"Type date or select",

        }/}
        {@aria:DatePicker {
            margins:"x x x 20",
            label: "end date:",
            labelWidth:190,
            helptext:"Type date or select",
            width:330,

        }/}
        <br/>
        <br/>
        <br/>

        {@aria:TextField {
          label : "User id",
          labelPos : "left",
          helptext : "ID",
          width : 250,
          block : true,
          labelWidth : 80,
          bind : {
            "value" : {
              inside : data,
              to : 'value' }
          }
    }/}
    <br />


   {/@aria:Div}
   <br />
   {@aria:IconButton {
      icon: "std:confirm",
      label:"Create",
      width : 300,
      tooltip : "Click on this to create a Report",
      block: true,
      onclick : {
        fn : buttonClick
      }
    } /}
  </div>
  </form> 
 {/macro}
{/Template}

Javascript 文件:

 Aria.tplScriptDefinition({
  $classpath : "view.TurnoverScript",
  $prototype : {
    /**
     * Callback for the click event on the first button.
     * @param {aria.DomEvent} evt Click event
     */
    buttonClick : function (evt) {


      aria.core.IO.asyncFormSubmit({
          formId : "turnoverform",
          callback : {
            fn : this.onSuccess,
            onerror : this.onError,
            scope : this
          }
        });
    },

    onSuccess : function (evt, args) {


        alert("The Template has been created");
        //this.$json.setValue(["view:Dialog"], "dialogOpen", true);

      },



      onError : function (evt, args) {


          alert("The Template has not been created due to some Error");

        }
  }
});
4

1 回答 1

2

在 Aria 模板中,您不能正常使用 DOM 元素,而是使用数据模型。

bind实现您想要的方法是使用属性将这些值绑定到数据模型

{@aria:DatePicker {
    label: " begin date:",
    labelWidth:190,
    width:330,
    helptext:"Type date or select",
    bind : {
        value : {
            inside : data,
            to : "begin_date"
        }
    }
}/}

您的数据模型现在将包含这些值,尝试修改这些值并查看this.data模板脚本中的内容。

要提交数据,您有两种选择,

  • 通过aria.core.Io.asyncRequest的模板脚本(或者可能是 RequestMgr,取决于您的应用程序复杂性)。此方法采用一个data字符串,在POST请求的情况下是消息正文。它必须是一个字符串,以便您可以使用aria.utils.json.JsonSerializer.serialize()将数据模型转换为字符串。

    aria.utils.json.JsonSerializer.serialize(this.data, config)

在前面的代码片段中config是可选的,如果提供它应该匹配这个bean

  • 通过submitJsonRequest的模块控制器 使用控制器的好处是您将连接到服务器的逻辑与模板分开,您可以直接将对象作为数据发送,序列化在内部完成。缺点是您可能必须配置UrlService以将操作转换为实际 URL。更多信息在这里
于 2013-05-14T08:05:18.603 回答