SSH框架添加类别功能,Action报java.lang.NullPointerException错误

HaBinLu 2017-06-15 02:06:24

这是完整错误
Struts Problem Report

Struts has detected an unhandled exception:

Messages:
File: action/CategoryAction.java
Line number: 33
Stacktraces

java.lang.NullPointerException
action.CategoryAction.addCategory(CategoryAction.java:33)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:606)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:289)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
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:246)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141

You are seeing this page because development mode is enabled. Development mode, or devMode, enables extra debugging behaviors and reports to assist developers. To disable this mode, set:

struts.devMode=false
in your WEB-INF/classes/struts.properties file.

这是Action类


这是struts

这是JSP
<?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.devMode" value="true" />

<package name="user" namespace="/" extends="struts-default">
<!-- 底层自动从spring容器中通过名称获得内容,getBean("userAction") -->
<action name="userAction_*" class="action.UserAction" method="{1}">
<result name="success">/message.jsp</result>
</action>

</package>
<package name="category" extends="struts-default" namespace="/category">
<action name="categoryAction_*" class="action.CategoryAction"
method="{1}">
<result name="success">/category/addCategory.jsp</result>
</action>
</package>

</struts>

这是spring配置

<!-- 加载properties文件 -->
<context:property-placeholder location="classpath:jdbcInfo.properties" />
<!-- 数据源 -->
<bean id="dataSourde" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSourde"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.current_session_context_class">thread</prop>
</props>
</property>
<property name="mappingLocations" value="classpath:domain/*.hbm.xml"></property>
</bean>
<!-- 注入用户Dao -->
<bean id="userDao" class="dao.impl.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>


<bean id="service" class="service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
</bean>

<!-- 注入类别Dao -->
<bean id="categoryDao" class="dao.impl.CategoryDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="CategoryService" class="service.impl.CategoryServiceImpl">
<property name="categoryDao" ref="categoryDao"></property>
</bean>


<!-- 注入新闻Dao -->
<bean id="newsDao" class="dao.impl.NewsDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="NewsService" class="service.impl.NewsServiceImpl">
<property name="newsDao" ref="newsDao"></property>
</bean>


<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 5.2 事务详情 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="register" />
</tx:attributes>

</tx:advice>
<tx:advice id="txCategory" transaction-manager="txManager">
<tx:attributes>
<tx:method name="addCategory" />
</tx:attributes>
</tx:advice>

<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* service..*.*(..))" />
<aop:advisor advice-ref="txCategory"
pointcut="execution(* service..CategoryService.*(..))" />
</aop:config>

</beans>

...全文
218 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
HaBinLu 2017-06-15
  • 打赏
  • 举报
回复
问题解决了 首先 在struts的action配置中,class要使用全限定类名,然后引用版主大神的话 categoryService的bean配置的 name属性,记得开头改成小写的,这样的话底层自动从spring容器中通过名称获得内容,然后把action类中的@Component删掉,再把bean中的action删掉就可以了
  • 打赏
  • 举报
回复
引用 8 楼 weixin_38299298 的回复:
大神 我按你说的去做了,service那个bean的配置的name属性也改成小写了,现在不报空指针,报了java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity
你在那个action 33行哪里设置个断点,看下categoryService 应该 是注入了, 这个问题说保存或者修改的实体传入是空的, 你断点看下33行,category 是不是null
HaBinLu 2017-06-15
  • 打赏
  • 举报
回复
引用 7 楼 shijing266 的回复:
[quote=引用 4 楼 weixin_38299298 的回复:] [quote=引用 2 楼 shijing266 的回复:]
java.lang.NullPointerException
    action.CategoryAction.addCategory(CategoryAction.java:33)   
CategoryAction 的 33行,categoryService为null 你需要在Spring配置里面,加上CategoryAction 的声明: <bean id="categoryAction " class="action.CategoryAction "> <property name="categoryService" ref="categoryService"></property> </bean> 另外,你的categoryService的bean配置的 name属性,记得开头改成小写的
不行啊,之前试过注入,还是空指针[/quote] 拜托,你看清我写的,另外,你的categoryService的bean配置的 name属性,记得开头改成小写的[/quote] 大神 我按你说的去做了,service那个bean的配置的name属性也改成小写了,现在不报空指针,报了java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity
  • 打赏
  • 举报
回复
引用 4 楼 weixin_38299298 的回复:
[quote=引用 2 楼 shijing266 的回复:]
java.lang.NullPointerException
    action.CategoryAction.addCategory(CategoryAction.java:33)   
CategoryAction 的 33行,categoryService为null 你需要在Spring配置里面,加上CategoryAction 的声明: <bean id="categoryAction " class="action.CategoryAction "> <property name="categoryService" ref="categoryService"></property> </bean> 另外,你的categoryService的bean配置的 name属性,记得开头改成小写的
不行啊,之前试过注入,还是空指针[/quote] 拜托,你看清我写的,另外,你的categoryService的bean配置的 name属性,记得开头改成小写的
李德胜1995 2017-06-15
  • 打赏
  • 举报
回复
引用 5 楼 weixin_38299298 的回复:
[quote=引用 1 楼 pany1209 的回复:] categoryService注入失败。。。建议使用注解
在spring 配置那里加了Action的注解也不行啊[/quote] 在spring配置中配置<context:component-scan 标签扫描你使用注解的类的包名, 使用@Autowired或者@Resource注入。。。。
HaBinLu 2017-06-15
  • 打赏
  • 举报
回复
引用 1 楼 pany1209 的回复:
categoryService注入失败。。。建议使用注解
在spring 配置那里加了Action的注解也不行啊
HaBinLu 2017-06-15
  • 打赏
  • 举报
回复
引用 2 楼 shijing266 的回复:
java.lang.NullPointerException
    action.CategoryAction.addCategory(CategoryAction.java:33)   
CategoryAction 的 33行,categoryService为null 你需要在Spring配置里面,加上CategoryAction 的声明: <bean id="categoryAction " class="action.CategoryAction "> <property name="categoryService" ref="categoryService"></property> </bean> 另外,你的categoryService的bean配置的 name属性,记得开头改成小写的
不行啊,之前试过注入,还是空指针
  • 打赏
  • 举报
回复
引用 1 楼 pany1209 的回复:
categoryService注入失败。。。建议使用注解
估计是初学,注解他应该还不懂
  • 打赏
  • 举报
回复
java.lang.NullPointerException
    action.CategoryAction.addCategory(CategoryAction.java:33)   
CategoryAction 的 33行,categoryService为null 你需要在Spring配置里面,加上CategoryAction 的声明: <bean id="categoryAction " class="action.CategoryAction "> <property name="categoryService" ref="categoryService"></property> </bean> 另外,你的categoryService的bean配置的 name属性,记得开头改成小写的
李德胜1995 2017-06-15
  • 打赏
  • 举报
回复
categoryService注入失败。。。建议使用注解
内容概要:本文围绕“阶梯碳下考虑P2G-CCS与供需灵活响应的IES优化调度”展开,基于Matlab平台构建综合能源系统(IES)在阶梯式碳交易机制下的优化调度模型。研究深度融合电制气(P2G)与碳捕集、利用与封存(CCS)技术,结合需求侧灵活响应机制,旨在提升系统的低碳运行能力与经济性。通过建立多能流耦合的优化模型,协调电力、天然气、热力等多种能源形式的协同调度,有效降低系统碳排放强度,并借助YALIMIP工具包调用求解器进行高效求解。文档提供了完整的代码实现、模型构建流程与结果分析方法,涵盖从问题建模到仿真实现的全过程,具备较强的可复现性与科研参考价值。; 适合人群:具备电力系统、能源系统或优化建模相关背景的研究生、高校教师及工程技术人员,尤其适合从事综合能源系统、碳减排策略、P2G与CCS技术集成研究的专业人员,需熟练掌握Matlab编程与基本的数学规划知识。; 使用场景及目标:①用于研究阶梯式碳交易政策下综合能源系统的低碳经济调度策略;②支撑P2G-CCS技术与需求响应机制在IES中的仿真集成与性能评估;③作为撰写高水平学术论文(如EI/SCI收录)的技术基础与复现资源,推动碳中和背景下能源系统优化方向的创新研究。; 阅读建议:建议结合百度网盘提供的完整代码与资料包,按照模块逐步调试程序,重点理解目标函数的设计逻辑、碳交易成本的建模方式、约束条件的数学表达及求解器的配置方法,同时关注多能耦合设备的建模细节,配合公众号“荔枝科研社”获取持续的技术支持与案例拓展。
内容概要:本文系统研究了基于卷积神经网络(CNN)与支持向量机(SVM)融合的CNN-SVM混合模型在数据分类预测中的应用,尤其聚焦于工业故障识别领域。通过Matlab平台实现,该方法首先利用CNN强大的多层次特征提取能力对原始输入数据进行深度特征学习,自动捕获关键局部模式与空间结构信息,随后将提取的高层特征作为输入传递至SVM分类器,借助SVM在高维空间中小样本条件下卓越的分类性能与泛化能力完成最终判别任务。文中详尽阐述了模型的整体架构设计、网络参数配置、训练优化流程及特征迁移机制,充分结合了深度学习在特征表达上的优势与传统机器学习在分类决策上的稳健性。实验部分通过实际故障数据集验证了该混合模型相较于单一CNN或SVM模型在分类准确率、鲁棒性和抗过拟合能力方面的显著提升,证明了其在复杂故障诊断任务中的有效性与先进性; 适合人群:具备一定机器学习与深度学习理论基础,熟悉Matlab编程环境,从事故障诊断、模式识别、智能制造、电力系统监控或工业数据分析等相关领域的研究生、科研人员及工程技术开发者; 使用场景及目标:① 应用于旋转机械、电力设备、航空航天等领域的多类别故障识别与状态监测;② 掌握深度特征提取与传统分类器融合的技术路径,提升小样本、高噪声环境下数据分类的精度与可靠性;③ 为撰写高水平学术论文、开展科研项目或工程实践提供可复现的算法框架与完整代码支持; 阅读建议:读者应深入理解CNN与SVM的协同工作机制,重点分析特征提取层与分类层之间的接口设计,建议动手运行并调试所提供的Matlab代码,尝试在不同数据集上进行迁移实验与参数调优,以全面掌握该混合模型的应用技巧与优化策略。

67,536

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧