【问题标题】:ATG dsp form input valueATG dsp 表单输入值
【发布时间】:2014-06-05 02:19:30
【问题描述】:

我正在尝试在不重新加载整个页面的情况下提交表单。我非常有信心我的逻辑可以解决这个问题,因为我正在使用事件侦听器来规避默认的表单提交逻辑。

$("body").on("click", '#buttonHolder', function() {
        $.ajax({
            type: 'POST',
            data: $('#storeCart').serialize(),
            dataType: "html",
            url: "/inc/store/cart/cart-contents.jsp",
            cache: false,
            success: function(response) {
                $("#formHolder").html(response);
            }
        });
        return false;
    });

我的 dsp 表单看起来像这样

<dsp:form action="" id="storeCart" formid="storeCart" method="post">
  <dsp:droplet name="/atg/dynamo/droplet/IsEmpty">
      <dsp:param name="value" param="element.WarrantyId"/>
         <dsp:oparam name="true">
            <input type="text" value='<dsp:valueof param="element.quantity" />' maxlength="3" class="inputQuantity" name='<dsp:valueof param="element.catalogRefId"/>' id='quantity-<dsp:valueof param="element.catalogRefId"/>'/>
         </dsp:oparam>
      <dsp:oparam name="false">
         <dsp:valueof param="element.quantity" />
            <input type="hidden" value='<dsp:valueof param="element.quantity" />' maxlength="3" class="inputQuantity" name='<dsp:valueof param="element.catalogRefId"/>' id='quantity-<dsp:valueof param="element.catalogRefId"/>'/>
      </dsp:oparam>
    </dsp:droplet>
  <td id="buttonHolder"><dsp:input value="Submit" type="submit" bean="......"/></td>
</dps:form>

问题是它似乎不想在我将它们添加到前端之后更改它们。为了更清楚:

输入字段的值为1。如果我继续将其更改为4,然后检查元素,该值仍然是1,这在表单提交并生成响应时反映。所以做一个 console.log($('testID').val());在输入上给我一个 1,而不是 4(需要)。这也在请求标头中进行。

编辑:

我更新了 dsp 表单部分,以更准确地反映带有阴影隐藏字段的字段。我似乎无法让表单接受新的输入。这些值将自己声明为存储在 jsp 变量中的值,即使在将新值注入 chrome 检查器时也是如此。

【问题讨论】:

    标签: jquery forms jsp atg


    【解决方案1】:

    每个输入字段都有一个相应的隐藏表单元素,由 ATG 在内部由 DSP 标签创建。您是否设置了相关的隐藏字段(例如下面的名字文本字段有一个以_D:/atg..etc.开头的相应隐藏字段)

    隐藏值必须设置为服务器发送的内容,因为您在更新文本字段时不会重新加载页面。

    <input id=“testid” class=“teststyle " type=“text” value="" name="/atg/something/SomeFormHandler.value.firstname” maxlength="60">
    <input type="hidden" value=" " name="_D:/atg/something/SomeFormHandler.value.firstname>
    

    【讨论】:

    • 是的,我在那里有隐藏字段。是否无法从 chrome 控制台更改此输入对的值?我无法更改变量,除非我退后一步并进行正常的表单提交,这将刷新整个页面(不需要)
    • 如果页面重新加载,服务器将采取某些操作来填充 _D(隐藏字段),以便知道服务器端更改了哪些值并在后台填充适当的值。
    • 检查 DYN_SESSION_CONF 如果您正在维护它,以便表单真正提交到后端。
    【解决方案2】:

    您上面的代码在使用 ATG dsp 标记方面似乎不一致。

    尝试使用&lt;dsp:input&gt; 标签而不是html &lt;input&gt; 标签。这将确保在您提交表单时将字段正确映射到 ATG FormHandler,例如

    <dsp:input bean='YourFormHandler.value.quantity' name='<dsp:valueof param="element.catalogRefId"/>' id='quantity-<dsp:valueof param="element.catalogRefId"/>' type="hidden" iclass="inputQuantity" value='<dsp:valueof param="element.quantity" />' maxlength="3" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      相关资源
      最近更新 更多