Jakarta ee 重复发布数据Struts

Jakarta ee 重复发布数据Struts,jakarta-ee,struts2,struts,jmeter,Jakarta Ee,Struts2,Struts,Jmeter,我试图通过使用JMetter提交100个数据来提交表单来测试我的保存功能。在我的函数中,首先我将数据保存到数据库中。但是因为有太多的数据是重复保存的,所以我尝试只写数据。我得到了原因,当我捕获JMetter提交的数据时,重复的数据就会出现。我想问,为什么提交的数据是重复的,而当我使用wireshark检查提交的请求post数据时,没有JMetter发送的重复数据。这意味着问题出在struts中。如何解决这个问题,谢谢 用于显示窗体的action类中的函数代码 public String rend

我试图通过使用JMetter提交100个数据来提交表单来测试我的保存功能。在我的函数中,首先我将数据保存到数据库中。但是因为有太多的数据是重复保存的,所以我尝试只写数据。我得到了原因,当我捕获JMetter提交的数据时,重复的数据就会出现。我想问,为什么提交的数据是重复的,而当我使用wireshark检查提交的请求post数据时,没有JMetter发送的重复数据。这意味着问题出在struts中。如何解决这个问题,谢谢

用于显示窗体的action类中的函数代码

public String renderAddMaintenanceItemForm(){
    maintenanceItem = new MaintenanceItemDto();
    return SUCCESS;
}
Jsp表单代码

<%@ taglib prefix="s" uri="/struts-tags"%>
<script type="text/javascript"> 
jQuery(document).ready(function() { 
    jQuery("#frmAddMaintenanceItem").validate({
        submitHandler: function(form) {
            return postForm(form, "savemaintenanceitem", "listmaintenanceitem", true);
        }
    });
});
</script>

<h4 class="widgettitle nomargin shadowed">Add Maintenance Item</h4>
<div class="widgetcontent bordered shadowed nopadding">
<form id="frmAddMaintenanceItem" class="stdform stdform2">   
    <s:hidden name="maintenanceItem.id" value="%{maintenanceItem.id}"/> 
    <s:if test="maintenanceItem.criteria == 'perma'">
        <s:hidden name="maintenanceItem.criteria" value="%{maintenanceItem.criteria}"/> 
        <p>
            <label>Item Name</label>
            <span class="field">
                <s:textfield name="maintenanceItem.name" value="%{maintenanceItem.name}" cssClass='input-xlarge required chardigit' minlength="5" maxlength="50"/>
            </span>
            </p>
    </s:if>
    <s:else>    
            <p>
                <label>Tipe</label>
                <span class="field">
                    <select name="maintenanceItem.criteria" class="uniformselect required">
                        <option>Select</option>
                            <option value='event' <s:if test="maintenanceItem.criteria == 'event'">selected="selected"</s:if>>
                                Event
                            </option>
                            <option value='time' <s:if test="maintenanceItem.criteria == 'time'">selected="selected"</s:if>>
                                Time
                            </option>
                    </select>
                </span>
            </p>
            <p>
                <label>Item Name</label>
                <span class="field">
                    <s:textfield name="maintenanceItem.name" value="%{maintenanceItem.name}" cssClass='input-xlarge required chardigit' minlength="5" maxlength="50"/>
                </span>
            </p>
            <p>
                <label>Normal Treshold (KM)</label>
                <span class="field"><s:textfield name="maintenanceItem.normalTreshold" value="%{maintenanceItem.normalTreshold}" cssClass="input-xxlarge required"/></span>
            </p>
            <p>
                <label>Max Treshold (KM)</label>
                <span class="field"><s:textfield name="maintenanceItem.maxTreshold" value="%{maintenanceItem.maxTreshold}" cssClass="input-xxlarge required"/></span>
            </p>
    </s:else>
    <p>
        <label>Note</label>
        <span class="field"><s:textfield name="maintenanceItem.note" value="%{maintenanceItem.note}" cssClass="input-xxlarge required"/></span>
    </p>
    <p class="stdformbutton">
        <button class="btn btn-primary">Submit </button>
        <button type="reset" class="btn">Reset </button>
    </p>
</form>
</div>

当我检查时,就好像jmetter忽略了表单上的javascript。Jmetter直接将数据发布到action类。是这样吗?我仍然不明白为什么它仍然得到重复的数据。

在名为postForm的javascript函数中,似乎还有另一个表单提交。这可能会导致双表提交。如果您找不到问题,请将jsp页面的各个部分切块,然后检查并提交给action类。

首先显示您所做的工作和代码,但当我检查时,就像jmetter忽略表单上的javascript一样。Jmetter直接将数据发布到action类。您可以从html中删除div类并再次测试它。我最后一次遇到这个问题是因为我在jsp页面中包含了可滚动的div。仅使用一行表单提交代码向服务器发出请求,并首先对其进行测试,然后添加更多代码,直到获得双重提交。
public String saveMaintenanceItem(){
    System.out.println(maintenanceItem.getName());
    /*messageDto = carService.saveMaintenanceItem(maintenanceItem);
    actionStatus = messageDto.getResult();
    SessionManager.serviceReturnToSession(session(), messageDto);*/
    return SUCCESS;
}