使用DynaValidatorForm的Struts项目提供HTTP状态500错误 - “资源不能为空”

时间:2016-03-12 16:40:07

标签: java hibernate jsp struts

我正在学习Struts,我用maven + hibernate + Struts创建了一个项目。当我运行项目时,JSP会加载,但是当我提交数据时,它会给我以下错误 -

  

HTTP状态500 - java.lang.IllegalArgumentException:资源不能为空。

我尽我所能,但我找不到它的错误。以下是我的源代码。

Web.xml: -

<web-app version="2.5" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<welcome-file-list>
    <welcome-file>Customer.jsp</welcome-file>
</welcome-file-list>

<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

    <init-param>
        <param-name>config</param-name>
        <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

Struts-config.xml: -

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC       "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"        "http://jakarta.apache.org/struts/dtds/struts-config_1_3.dtd">

<struts-config>
    <form-beans>
        <form-bean name="customerActionForm" type="org.apache.struts.validator.DynaValidatorForm">
            <form-property name="name" type="java.lang.String"></form-property>
            <form-property name="age" type="java.lang.String"></form-property>
            <form-property name="contactNo" type="java.lang.String"></form-property>
            <form-property name="email" type="java.lang.String"></form-property>
        </form-bean>
</form-beans>

<action-mappings>
    <action path="/register" name="customerActionForm" parameter="parameter" type="com.openarc.struts.action.CustomerAction" input="Customer.jsp">
        <forward name="success" path="index.jsp"></forward>
    </action>
</action-mappings>

<message-resources parameter="errors"/>

errors.properties(以前用于验证器框架)

label.name = Name
label.age = Age
label.contactNo = Contact Number
label.email = Email

Customer.jsp: -

<body>
    <html:form action="register">
        <table>
            <tr>
                <td><bean:message key="label.name"/> </td>
                <td><html:text property="name"></html:text></td>
            </tr>
            <tr>
                <td><bean:message key="label.age"/> </td>
                <td><html:text property="age"></html:text></td>
            </tr>
            <tr>
                <td><bean:message key="label.contactNo"/> </td>
                <td><html:text property="contactNo"></html:text></td>
            </tr>
            <tr>
                <td><bean:message key="label.email"/> </td>
                <td><html:text property="email"></html:text></td>
            </tr>
            <tr>
                <td></td>
                <td><html:submit property="parameter" value="Create Customer"></html:submit> </td>
            </tr>
        </table>
    </html:form>
</body>

CustomerAction.java: -

public class CustomerAction extends DispatchAction{

    public ActionForward createCustomer(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        DynaActionForm dynaForm = (DynaActionForm)form;

        Customer customer = new Customer();
        customer.setCustomerId(1);
        customer.setName(dynaForm.getString("name"));
        customer.setAge(Short.parseShort(dynaForm.getString("age")));
        customer.setContactNo(dynaForm.getString("contactNo"));
        customer.setEmail(dynaForm.getString("email"));

        CustomerDAO customerDAO = new CustomerDAO();
        customerDAO.createCustomer(customer);

        return mapping.findForward("success");
    }
}

CustomerDAO.java: -

public class CustomerDAO {

    public Customer createCustomer(Customer customer){
        Transaction transaction = null;
        try{
            Session session = HibernateUtil.openSession();
            transaction = session.beginTransaction();
            session.save(customer);
            session.flush();
            transaction.commit();
            session.close();
        }catch(Exception e){
            transaction.rollback();
            e.printStackTrace();
        }finally{
            HibernateUtil.closeSession();
        }
        return customer;
    }
}

HibernateUtil.java: -

public class HibernateUtil {
    private static final SessionFactory SESSIONFACTORY = createSessionFactory();
    private static final ThreadLocal<Session> THREADLOCAL = new ThreadLocal<Session>();

    private static SessionFactory createSessionFactory() {
        try{
            return new Configuration().configure().buildSessionFactory();
        }catch(HibernateException e){
             System.err.println("Initial SessionFactory creation failed." + e);
             throw new ExceptionInInitializerError(e);
        }
    }

    public static Session openSession(){
        Session session = THREADLOCAL.get();
        if(session == null){
            session = SESSIONFACTORY.openSession();
            THREADLOCAL.set(session);
        }
        return session;
    }

    public static void closeSession(){
        Session session = THREADLOCAL.get();
        if(session.isOpen()){
            session.close();
            THREADLOCAL.remove();
        }
    }
}

当我搜索互联网时,这似乎是一个着名的错误,但我无法找到我的代码到底出了什么问题。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

struts-config.xml的内容下方添加插件。希望它能解决你的问题。

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property
property="pathnames"
value="/org/apache/struts/validator/validator-rules.xml,
/WEB-INF/validation.xml"/>
</plug-in>

请勿忘记validation.xml

中的/WEB-INF/validation.xml初始文件