在struts2验证中需要帮助

时间:2009-06-20 12:38:59

标签: validation struts2

我在struts.xml文件中有以下内容

<action name="ProductVerification" class="com.frontend.ProductVerification">
    <result name="success">/jsp/product_verification.jsp</result>
    <result name="input">/jsp/product_verification.jsp</result>
    <result name="error">/jsp/product_verification.jsp</result>
</action>

我的html代码中有以下内容     

<s:form name="frmVerification" id="frmVerification" onsubmit="Javascript: return checkFrmVerification(this);"  >

<s:select name="countryId" id="cmbcountryid"  headerKey="0"  headerValue="%{getText('label.Please_Select')}" list="%{countryListCombo}" listKey="countryId" listValue="country" value="countryId" cssClass="style2" onchange="Javascript: GetCities();" required="true" />

<s:submit name="submit" src="images/submit_btn.jpg" type="image" value="submit" />

</form>

我有如下的执行方法。

public String execute() throws Exception {

    Session session = this.getHibernateSession();

    Transaction tx = session.beginTransaction();

    //Following will set combo box containing country list
    this.setCountryListCombo();

    tx.commit();

    return SUCCESS;
}

我正在覆盖验证方法,如下所示。

@Override
public void validate() {
 HttpServletRequest request = this.getServletRequest();

     if(request.getParameter(countryId) == 0){
          addFieldError("countryId", "Please select country");
     }

}

现在,当我执行我的操作时,它将显示带有countryId组合框的表单,其中包含国家/地区。

现在当我在不选择组合框的情况下提交表单时,它应该显示错误。

但不是显示错误“请选择国家/地区”它会给我以下错误。

Struts问题报告

Struts检测到未处理的异常:

消息:标记'select',字段'list',名称'countryId':请求的列表键'%{countryListCombo}'无法解析为collection / array / map / enumeration / iterator类型。例如:人或人。{name}

文件: org / apache / jasper / servlet / JspServletWrapper.java

行号: 522

任何人都可以告诉我为什么会这样吗?

似乎在validate()方法给出result =“input”之后,它不会调用execute()方法,而是尝试直接显示“/jsp/product_verification.jsp”页面。

请帮我解决问题。

感谢。

2 个答案:

答案 0 :(得分:1)

您的假设是正确的,当添加字段错误时,它将默认返回“INPUT”结果,从而导致输入结果被渲染。我建议考虑实现可伪装,这样可以在页面渲染之前始终填充组合框。

答案 1 :(得分:1)

您需要在方法中添加组合框代码,如下所示:

public String execute() throws Exception {

//add this code also as per your comobobx code
countryList = new ArrayList<Country>();
        countryList.add(new Country(1, "India"));
        countryList.add(new Country(1, "Shri Lanka"));
        countryList.add(new Country(1, "USA"));
        countryList.add(new Country(1, "Pakistan"));
        countryList.add(new Country(1, "NewsLnad"));

//add this code also as per your comobobx code

    Session session = this.getHibernateSession();

    Transaction tx = session.beginTransaction();

    //Following will set combo box containing country list
    this.setCountryListCombo();

    tx.commit();

    return SUCCESS;
}

并在jsp页面中添加以下标记

<s:actionerror />