3

我有一个让用户创建项目的 JSP。

创建后,我将它们显示在表格的同一页面中,并带有两个按钮,即更新和删除。

当用户更改值并单击更新时,值正在更改并显示添加,第一行列值+更改的值以逗号分隔。

谁能告诉我为什么会发生以及如何解决。

找到下面的jsp文件

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<script type="text/javascript">

    function updateRow(id) {
var manufacturer = document.getElementById("manufacturer").value;   
var family = document.getElementById("family").value;
                var model = document.getElementById("model").value;

        var url = "id="+id+"&manufacturer="+manufacturer+"&model="+model+"&family="+family;
            document.globalForm.action= "http://localhost:8080/ContentInventory/update.action?id=" + id + "&manufacturer="+ manufacturer + "&model=" + model + "&family=" + family;
        document.globalForm.submit(); 
    }

    function deleteRow(id) {
        document.globalForm.action = "http://localhost:8080/ContentInventory/delete.action?id="+id;
        document.globalForm.submit();

    }

    function addDetails() {
    document.globalForm.action = "http://localhost:8080/ContentInventory/add.action";
alert(document.globalForm.action);
document.globalForm.submit();

    }
</script>

<html>

<body>

    <h1>Global Handset Compatibility</h1>
    <s:actionerror />

    <s:form id="globalForm" name="globalForm" method="post" theme="simple" >
        <table>

            <tr>
                <td><s:label value="Manufacturer" />
                </td>
                <td><s:textfield name="manufacturer" label="Manufacturer" />
                </td>
            </tr>
            <tr>
                <td><s:label value="Model" />
                </td>
                <td><s:textfield name="model" label="Model" />
                </td>
            </tr>
            <tr>
                <td><s:label value="Family" />
                </td>
                <td><s:textfield name="family" label="Family" />
                </td>
            </tr>
            <tr>
                <td colspan="2" align="center">
                <!--<s:submit value="Add Inventory" align="center" />-->
                <input type="button" value="Add Inventory" id="addButton" onclick="javascript:addDetails()" >
                </td>
            </tr>
        </table>





        <h2>Inventory List</h2>
    <table id="global" border="1" width="100%">
        <tr>
            <th>Manufacturer</th>
            <th>Model</th>
            <th>Family</th>
            <th>Delete</th>
            <th>Edit/Update</th>
        </tr>

        <s:if test="%{globalList.size() > 0}">
            <s:iterator value="globalList" id="globals">

                <tr>


                    <td align="center">
                    <s:textfield id="manufacturer" name="#globals.manufacturer" /></td>

                    <td align="center"><s:textfield id="model" name="#globals.model" /></td>



                    <td align="center"><s:textfield id="family" name="#globals.family" /></td>

                    <td align="center"><input type="button" value="Delete" id="deleteButton" onclick="javascript:deleteRow('<s:property value="id"/>')">
</td>
                    <td align="center">
                                        <input type="button"  value="Update" id="updateButton<s:property value="id"/>"  onclick="javascript:updateRow('<s:property value="id"/>')">

                    </td>
                </tr>
            </s:iterator>

        </s:if>
        <s:else>
            <tr>
                <td colspan="5">No Data Found</td>
            </tr>
        </s:else>

    </table>
        </s:form>
</body>
</html>

在动作类中,我有字段的 getter 和 setter 方法,在单击更新按钮时,我使用 js 获取更新的值并发送到后端。这些值插入正确,但是在显示页面时,它显示了用逗号分隔的值,第一和第二个值也是不正确的......

感谢您的回复

4

2 回答 2

2

前几天这件事发生在我身上。事实证明,我有多个具有相同名称的字段。

希望能帮助到你。

于 2016-06-01T21:43:25.993 回答
0

ids 中的属性iterator已弃用,请var改用。

我不确定你在这里问什么,但如果你正在迭代一个列表,并且你想唯一地引用该列表的一个元素(无论是在发布时,还是在通过 javascript 获取值时),你需要使用索引:

<s:iterator value="globalList" var="globals" status="ctr">

   <s:textfield id="manufacturer" name="globalList[#ctr.index].manufacturer" />

   <s:textfield id="model" name="globalList[#ctr.index].model" />

   <s:textfield id="family" name="globalList[#ctr.index].family" />

ETC...

您也可以使用 IteratorStatus 生成唯一的 HTMLid字段(否则它将不是有效的 HTML),例如:

<s:textfield id="manufacturer_num_%{#ctr.index}" 
             name="globalList[#ctr.index].manufacturer" />

这样您就可以唯一地引用每个字段:

var manufacturer = document.getElementById("manufacturer_num_" + counter).value;

当然,要使其正常工作,您需要将countervar 传递给 javascript 函数。

最后的想法是,在迭代元素中使用索引,您将不再需要任何 javascript 或单个帖子来更新值:只需在操作中声明 aList<yourObject> 并发布所有网格,列表将自动填充行来自您的 JSP;出于安全原因,您只需要为删除方法引用单个元素。

于 2013-03-11T09:35:26.967 回答