【发布时间】:2023-03-25 16:07:01
【问题描述】:
我正在用 struts2 开发一个网页,该页面将具有一些输入字段的默认行以及“添加”、“删除”和“提交”按钮。当用户单击“添加”按钮时,会出现一个新的应生成输入字段行,单击“删除”按钮时应删除不需要的字段行。我可以使用 java 脚本执行此操作,但在验证后重新加载页面时遇到问题。
当用户提交页面时,输入的值将在服务器端进行验证,如果输入值有任何错误,则应在用户提交表单时与表单字段一起显示在同一页面上。但在我的情况下,当用户输入一些值并提交表单时,会验证值并且错误将显示在同一页面上,但所有字段值都在同一行中,而不是多行(如果有)。详情请参考代码sn-p。
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<HTML>
<HEAD>
<TITLE> Add Page</TITLE>
<SCRIPT language="javascript">
function addRow(tableID) {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
var row = table.insertRow(rowCount);
var colCount = table.rows[0].cells.length;
for(var i=0; i<colCount; i++) {
var newcell = row.insertCell(i);
newcell.innerHTML = table.rows[0].cells[i].innerHTML;
//alert(newcell.childNodes);
switch(newcell.childNodes[0].type) {
case "text":
newcell.childNodes[0].value = "";
break;
case "checkbox":
newcell.childNodes[0].checked = false;
break; }}}
function deleteRow(tableID) {
try {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
var count=0;
for(var i=0; i<rowCount; i++) {
var row = table.rows[i];
var chkbox = row.cells[0].childNodes[0];
if(null != chkbox && true == chkbox.checked) {
count++;
if(rowCount <= 1) {
alert("Cannot delete all the rows.");
break;
}
table.deleteRow(i);
rowCount--;
i--; } }
if(count==0)
{
alert("Please select the rows to be deleted !");
}}catch(e) { alert(e);} }
</SCRIPT>
</HEAD>
<BODY>
<s:if test="hasActionErrors()">
<s:iterator value="actionErrors">
<span class="errorMessage" style="padding-left: 160px;"><s:property escape="false" /> </span>
</s:iterator>
</s:if>
<br />
<s:if test="hasActionMessages()">
<s:iterator value="actionMessages">
<span class="infoMessage" style="color: green; padding-left: 160px;"><s:property escape="false" /> </span>
</s:iterator>
</s:if>
<s:form method="post" theme="simple" action="addComponentDetails">
<INPUT type="button" value="Add Row" onclick="addRow('dataTable')" />
<INPUT type="button" value="Delete Row" onclick="deleteRow('dataTable')" />
<table border="1">
<tr><td ></td>
<td ><s:text name="label.addComponent.partNumber" /></td>
<td ><s:text name="label.addComponent.componentDescription" /></td>
<td ><s:text name="label.addComponent.quantity" /></td>
<td ><s:text name="label.addComponent.unitPrice" /></td>
<td ><s:text name="label.addComponent.totalPrice" /></td>
</tr>
</table>
<table id="dataTable" border="1">
<tr>
<td><s:checkbox name="test" id="chk" /></td>
<td><s:textfield name="addComponent.partNumber" id="txt" /></td>
<td><s:textfield name="addComponent.componentDescription" id="txt"/></td>
<td><s:textfield name="addComponent.quantity" id="txt"/></td>
<td><s:textfield name="addComponent.unitPrice" id="txt"/></td>
<td><s:textfield name="addComponent.totalPrice" id="txt"/></td>
</tr>
</table>
<s:submit name="submit" value="Add details"/>
</s:form>
</BODY>
</HTML>
在上面的jsp中addComponent是一个POJO对象。
POJO 类 -
public class SigmaAddComponent {
private String partNumber[],componentDescription[],quantity[],unitPrice[],totalPrice[];
//getters and setters for the above attributes.
}
动作类-
import com.bo.SigmaAddComponentBO;
import com.exception.SigmaException;
import com.opensymphony.xwork2.ActionSupport;
import com.vo.SigmaAddComponent;
public class SigmaAction extends ActionSupport
{
SigmaAddComponent addComponent = new SigmaAddComponent();
//Getter and setter for addComponent
public String addComponentDetails()
{
try
{
new SigmaAddComponentBO().validateDetails(addComponent);
}
catch (SigmaException se)
{
addActionError((se.getErrorMsg()));
}
return "success";
}
}
你能建议我如何处理这种情况吗?
谢谢。
提前致谢。
【问题讨论】:
标签: struts2