如何:Struts 2验证动态表单数组

时间:2014-07-23 20:47:50

标签: java arrays jsp validation struts2

我读过这篇文章 Struts2 Validation for an array

这是有道理的,但希望的人(Quaternion)会解释如何

“重写以上内容以明确命名字段(带索引),在这种情况下您可以使用,并且您将使用addFieldError方法。有关这些标记的详细信息,请参阅http://struts.apache.org/2.3.1.2/docs/tag-reference.html

这就是我所拥有的:

<s:form action="saveOrUpdateAction" method="get">
    <s:token/>
    <table>
        <tr>
            <td> Fund </td>
            <td> Award Code </td>
        </tr>
        <s:iterator value="gfeListWithEmptyCode">
            <tr>
                <td> <s:property value="sfafund "/> </td>
                <td> <s:property value="awardcode"/>
                    <input type="text" name="codeArray">
                </td>
            </tr>
        </s:iterator>
        <s:token />
        <s:submit key="Submit2"/>
    </table>
</s:form>

我的行动的一部分:

public void validate()
{
    if (fund == null || fund.trim().length() != 5 )
    {
        System.out.println("testing+++++++++++++++++++1");
        addFieldError("fund","Fund requires 5 characters.");
    }
    if (code == null || code.trim().length() != 3 )
    {
        System.out.println("testing+++++++++++++++++++2");
        addFieldError("code","Fund requires 3 characters.");
    }


    if (gfeListWithEmptyCode !=null)
    {

        int index = 0;
        for (GiftFundEntity giftFundEntity : gfeListWithEmptyCode)
        {
            if ( codeArray[index]!=null && codeArray[index].length() < 3 )
            {

                System.out.println("testing+++++++++++++++++++3");

                // technically, this is not possible to do because it requires codeArray[index] and not a string.

                addFieldError("codeArray","Code requires 3 characters.");
                index++;
            }
        }
    }


    try
    {
        this.execute();
    } catch (Exception e)
    {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    }
}

在验证期间,由于显而易见的原因,红色错误消息未显示在jsp页面上,因为索引未列出codeArray。我如何让它工作? *请注意* 数组是动态的。

我查看了struts文档并通过stackoverflow进行了搜索,但我看不出它是如何完成的。

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

答案是Struts 2将Action类中的codeArray变量视为Array:String [] codeArray;这没有记录。