struts jsp复数button的值通过数组传递到后台

50 阅读1分钟

步骤概述

  1. 在Form类中定义状态数组ActionForm中定义一个String数组来保存按钮的状态值。
  2. 在JSP页面中设置按钮和隐藏字段 使用隐藏字段来保存按钮的值,并通过JavaScript在按钮点击时更新隐藏字段的值。
  3. 在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,按钮的值会被更新到隐藏字段中。这些隐藏字段的值会在表单提交时传递到后台。
  • 未点击的按钮:如果按钮没有被点击,则对应的隐藏字段的值为空,后台可以通过检查这些值是否为空来判断按钮是否被点击。

这种方法确保只有点击过的按钮的值被提交到后台,而未点击的按钮不会传递值。