【问题标题】:Multiple form execution in Struts 2Struts 2 中的多表单执行
【发布时间】:2013-06-14 15:50:02
【问题描述】:

我正在开发 Struts 2 和 Hibernate 集成应用程序,我必须制作类似的员工注册系统

  1. 员工姓名详细信息 JSP 页面
  2. 员工教育详情页面。
  3. 员工资格详情

我将这些页面放在彼此的成功页面上,以便页面上的成功注册显示其他页面的形式,但在第一页输入值后,它完全运行成功并显示第二页,这是教育详细信息,但当我在投入价值并提交。它不起作用,我收到错误消息。

java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity
    org.hibernate.event.spi.SaveOrUpdateEvent.<init>(SaveOrUpdateEvent.java:62)
    org.hibernate.event.spi.SaveOrUpdateEvent.<init>(SaveOrUpdateEvent.java:45)
    org.hibernate.internal.SessionImpl.save(SessionImpl.java:748)
    org.hibernate.internal.SessionImpl.save(SessionImpl.java:744)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:352)
    $Proxy13.save(Unknown Source)
    dao.Edudao.add(Edudao.java:13)
    action.Eduaction.execute(Eduaction.java:24)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
    com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
    org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:142)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
    org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
           <constant name="struts.enable.DynamicMethodInvocation" value="true"/>
           <constant name="struts.devmode" value="true"/>
         
          <package name="loginmodel" extends ="struts-default">
             <action name ="employee" class ="action.Empaction">
             <result name = "input">/EMP/employee.jsp</result>
             <result name ="success">/EMP/empedu.jsp</result>
            </action>
            <action name ="education" class="action.Eduaction">
             <result name= "siccess">/EMP/success.jsp</result>
                     
            </action>
                                  
         </package>
</struts>

我在 DAO 层使用 Hibernate

Edudao.java:

package dao;

import org.hibernate.Session;

import model.Empedu;

public class Edudao {
public Empedu  add(Empedu model){
     Session session1 = ConnectionFactory.getSessionFactory().getCurrentSession();
    
    
     session1.beginTransaction();
     session1.save(model);
     
     session1.getTransaction().commit();
       return model;

}
    
}

Eduaction.class 是:

package action;

import model.Empedu;


import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

import dao.Edudao;

    public class Eduaction extends ActionSupport implements ModelDriven<Empedu> {
     
        private static final long serialVersionUID = 1L;
    private Empedu model;
    
        public Empedu getModelobj() {
        return model;
    }
    public void setModelobj(Empedu model) {
        this.model = model;
    }
    public String execute()throws Exception{
        Edudao edudao = new Edudao();
        Empedu queryresult = edudao.add(getModelobj());
        if(queryresult!=null){
            return SUCCESS;
            }
        else
            return ERROR;
    }       
        @Override
        public Empedu getModel() {
            // TODO Auto-generated method stub
            return null;
        }
    
    }

【问题讨论】:

  • 您能否分享您的操作类和 jsps 代码以检查流程以及可能出现的问题?

标签: java hibernate tomcat web-applications struts2


【解决方案1】:

Edudao.add() 中,您不应在null 或实体的瞬态实例上使用saveOrUpdate。使用save 方法来持久化瞬态实例。

把代码改成

public Empedu add(Empedu model) throws Exception {
  if (model == null || model.getId() != null)
    throw new IllegalArgumentException("null model, or has id not null");

  Session session = ConnectionFactory.getSessionFactory().getCurrentSession();
  Transaction tx = session.beginTransaction();

  try {
    session.save(model);

    tx.commit();
    return model;
  } finally{
    if (session.isOpen()){
      try {
        ConnectionFactory.getSessionFactory().closeSession();
      }
     catch (Exception e2) {}
   }
 }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多