使用javascript在jsp上动态创建struts 2表单

时间:2012-01-03 10:29:47

标签: javascript forms jsp struts2

我需要的是一个非常标准的功能。而且我确信它很容易,但不知怎的,我无法实现它。请帮帮我。

这是方案 - >

我在jsp上有一个struts表单,它接收员工信息。现在我想和每个员工联系一些家庭成员。

因此,对于我想要的家庭成员的信息:

1。)一行 - 1个选择元素和3个文本字段元素 - 在表单的末尾。

2。)“添加”按钮,根据需要添加这些行以添加更多家庭成员。

我不知道如何附上屏幕截图来准确了解我想要的内容。

我尝试过这样做,使用javascript,但javascript添加了标准的HTML元素,因为我无法访问我的动作类中这些字段的值。(请告诉我,如果不是这样,因为然后唯一的问题是,为什么我无法访问这些值?

目前正在尝试的内容:

JSP:

<s:form name="enterEmployeeInfo" id="enterEmployeeInfo" action="enterEmployeeInfo">

    ////OTHER FORM ELEMENTS//////////////

        <table>
        <tr>
            <td>Relationship</td>
            <td>Name</td>
            <td>Age</td>
            <td>Occupation</td>
        </tr>
        <tr>
            <td>
                <select name="rel">
                    <option value=""></option>
                    <option value="Father">Father</option>
                    <option value="Mother">Mother</option>
                    <option value="Spouse">Spouse</option>
                    <option value="Child">Child</option>
                </select>
            </td>
            <td> <input name="rName[]"/></td>
            <td> <input name="rAge"/>          </td>
            <td> <input name="rOccupation"/>   </td>
            <td colspan="4" align="right"><button type="button" onclick="tryFunc(this.parentNode);">Add</button></td>
        </tr>
        </table>
        <s:submit value="Add Employee" name="submit"/>
        <s:reset  value="Reset"       name="reset"/>
</s:form>

JS:

function tryFunc(node){
    var root = node.parentNode.parentNode;
    var allRows = root.getElementsByTagName('tr');
    var cRow = allRows[1].cloneNode(true);
    var cInp = cRow.getElementsByTagName('input');
    for(var i=0;i<cInp.length;i++){
        cInp[i].setAttribute('name',cInp[0].getAttribute('name')+'_'+(allRows.length+1))
    }
    var cSel = cRow.getElementsByTagName('select')[0];
    cSel.setAttribute('name',cSel.getAttribute('name')+'_'+(allRows.length+1));
    root.appendChild(cRow);
}

有了这个,我可以添加一行新的指定元素,但无法访问动作类中的字段值。我想指出,我甚至无法访问动作类中的第一行元素(可能是因为它们是标准HTML)。

感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

这是问题的解决方案,对于那些仍然困在它上面的人。

在jsp中:

<s:form name="enterEmployeeInfo" id="enterEmployeeInfo" action="enterEmployeeInfo">

    ////OTHER FORM ELEMENTS//////////////

        <table>
            <tr>
                <td align="center">Relationship</td>
                <td align="center">Name</td>
                <td align="center">Age</td>
                <td align="center">Occupation</td>
            </tr>
            <tr>
                <td>
                    <select name="rel">
                        <option value=""></option>
                        <option value="Father">Father</option>
                        <option value="Mother">Mother</option>
                        <option value="Spouse">Spouse</option>
                        <option value="Child">Child</option>
                    </select>
                </td>
                <td> <input name="rName"/></td>
                <td> <input name="rAge"/>          </td>
                <td> <input name="rOccupation"/>   </td>
            </tr>
            <tr>
                <td colspan="4" align="right"><button type="button" onclick="tryFunc(this.parentNode);">Add</button></td>
            </tr>
        </table>
        <s:submit value="Add Employee" name="submit"/>
        <s:reset  value="Reset"       name="reset"/>
</s:form>

JS:

function tryFunc(node){
    var root = node.parentNode.parentNode;
    var allRows = root.getElementsByTagName('tr');
    var cRow = allRows[1].cloneNode(true);
    root.appendChild(cRow);
}

然后在动作类中,只需定义如下变量:

    private String rel[];
    private String rName[];
    private String rAge[];
    private String rOccupation[];

定义他们的getter和setter,你可以像这样访问jsp中每行的每个元素:

    rel[0], rel[1], ........
    rName[0],rName[1], .......
    etc......

至于将select元素的值复制到克隆行,其简单的javascript。就这样做:

    clonedSelect.selectedIndex = original.selectedIndex;

如果您仍有问题,请发表评论。 :)