步骤概述
- 在Form类中定义状态数组 在
ActionForm中定义一个String数组来保存按钮的状态值。 - 在JSP页面中设置按钮和隐藏字段 使用隐藏字段来保存按钮的值,并通过JavaScript在按钮点击时更新隐藏字段的值。
- 在Action类中处理表单数据 在Action类中获取和处理按钮状态。
1. 在Form类中定义状态数组
在ActionForm中定义一个String数组,用于保存按钮的状态值:
java
public class MyForm extends ActionForm {
private String[] buttonStates;
public String[] getButtonStates() {
return buttonStates;
}
public void setButtonStates(String[] buttonStates) {
this.buttonStates = buttonStates;
}
}
2. 在JSP页面中设置按钮和隐藏字段
在JSP页面中,为每个按钮定义一个隐藏字段,并使用JavaScript更新隐藏字段的值。只有当按钮被点击时,隐藏字段的值才会更新。
jsp
<%@ taglib uri="http://struts.apache.org/tags/html" prefix="html" %>
<html:form action="/submitAction">
<table>
<tr>
<td>
<button type="button" onclick="setButtonState(0, '10')">Button 1</button>
<input type="hidden" name="buttonStates[0]" id="buttonState0" value=""/>
</td>
</tr>
<tr>
<td>
<button type="button" onclick="setButtonState(1, '11')">Button 2</button>
<input type="hidden" name="buttonStates[1]" id="buttonState1" value=""/>
</td>
</tr>
<tr>
<td>
<button type="button" onclick="setButtonState(2, '12')">Button 3</button>
<input type="hidden" name="buttonStates[2]" id="buttonState2" value=""/>
</td>
</tr>
</table>
<html:submit value="Submit"/>
</html:form>
<script type="text/javascript">
function setButtonState(index, value) {
document.getElementById('buttonState' + index).value = value;
}
</script>
3. 在Action类中处理表单数据
在Action类中获取表单数据并进行处理:
java
public class MyAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
MyForm myForm = (MyForm) form;
String[] buttonStates = myForm.getButtonStates();
// 处理按钮状态
for (int i = 0; i < buttonStates.length; i++) {
if (buttonStates[i] != null && !buttonStates[i].isEmpty()) {
System.out.println("Button " + (i + 1) + " value: " + buttonStates[i]);
}
}
return mapping.findForward("success");
}
}
处理情况说明
- 按钮状态:通过JavaScript函数
setButtonState,按钮的值会被更新到隐藏字段中。这些隐藏字段的值会在表单提交时传递到后台。 - 未点击的按钮:如果按钮没有被点击,则对应的隐藏字段的值为空,后台可以通过检查这些值是否为空来判断按钮是否被点击。
这种方法确保只有点击过的按钮的值被提交到后台,而未点击的按钮不会传递值。