java - 如何在 Struts 2 中提交特定的迭代器条目以执行操作

标签 java javascript struts2 submit loops

我正在开发一个购买虚拟元素的市场,我计划让它按行显示每个元素的详细信息,并在每个元素旁边有一个“购买”按钮。这是我所拥有的:

<s:form method="post">
    <s:hidden name="shownType"/>
    <table>
        <tr>
            <td>Name</td>
            <td>Image</td>
            <td>Type</td>
            <td>Price</td>
            <td>Buy</td>
        </tr>
        <s:iterator value="items" var="item">
            <tr>
                <td><s:property value="name" /></td>
                <td><s:property value="image" /></td>
                <td><s:property value="type" /></td>
                <td align="center"><s:property value="price" /></td>
                <td><s:submit value="Buy"
                onclick="coinAlert()" action="Buy"
                type="button" theme="simple">
                </s:submit></td>
            </tr>
        </s:iterator>
    </table>
</s:form>

理论上,我想将特定的 Item 对象(名称、图像等)传递给 Buy 操作(具体来说,传递给名为 buyItem 的 Item)。问题是,我不确定如何引用单击的按钮旁边的特定项目。我试过了

<s:hidden name="boughtItem.name" value="%{#item.name}"/>

但这会将 buyItem 的名称设置为列表中所有项目的名称,并以逗号分隔。任何使用迭代器一次设置整个 buyItem 对象的尝试都失败了。

对此的任何见解将不胜感激。

最佳答案

不要使用submit按钮,而是使用一个简单的按钮并使用javascript提交表单

<s:form method="post" action="Buy" name="myForm">
    <s:hidden name="name" id='name_to_submit'/>
    <s:hidden name="image" id='image_to_submit'/>
    <s:hidden name="type" id='type_to_submit'/>
    <s:hidden name="price" id='price_to_submit'/>
    <table>
        <tr>
            <td>Name</td>
            <td>Image</td>
            <td>Type</td>
            <td>Price</td>
            <td>Buy</td>
        </tr>
        <s:iterator value="items" var="item">
            <tr id="<s:property value="name" />">
                <td><s:property value="name" /></td>
                <td class='image_td'><s:property value="image" /></td>
                <td class='type_td'><s:property value="type" /></td>
                <td class='price_td' align="center"><s:property value="price" /></td>
                <td><input type="button" value="Buy"
                onclick="submitForm('<s:property value="name" />')">
                </td>
            </tr>
        </s:iterator>
    </table>
</s:form>

JavaScript

function submitForm(name){
   //All this would be very easy if you were using jQuery
   var nameElem = document.getElementById(name);
   //get values for selected row
   var imageVal = nameElem.getElementsByClassName("image_td")[0].innerHTML;
   var priceVal = nameElem.getElementsByClassName("price_td")[0].innerHTML;
   var typeVal = nameElem.getElementsByClassName("type_td")[0].innerHTML;
    //set the values to submit
   document.getElementById("name_to_submit").value = name;
   document.getElementById("image_to_submit").value = imageVal;
   document.getElementById("price_to_submit").value = priceVal;
   document.getElementById("type_to_submit").value = typeVal;

   document.myForm.submit(); //finally submit the form
}

最好使用一些标识符属性作为 id 而不是 name

关于java - 如何在 Struts 2 中提交特定的迭代器条目以执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13020727/

相关文章:

java - MySQL更新触发错误;在更新的记录中设置值

java - 使用GSON将字符串转换为json数组

java - Play Framework 清洁与清洁所有

javascript - 如何创建 CSS 来提供比例边距

执行 appendChild 时的 Javascript 额外标记

java - 在 Spring AbstractRoutingDataSource 中访问 Struts2 语言环境

java - 为什么更新实体会将其子实体的字段更改为空?

maven - 使用 Maven 3 设置 Struts2 EAR 项目

java - NetBeans 中的文本字段禁用

javascript - 最不干涉的 AJAX 构建器/图形开发环境