Struts2中为Action的List属性赋值问题揭秘

      话说“天降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤”,同样,要想更深入的掌握一项技术,必先对其有持久的耐性,然后有遇见问题必解决问题的决心。废话少说,直接贴出异常:

java.rmi.RemoteException: EJB Exception: ; nested exception is:
        java.lang.RuntimeException: Unexpected Exception
        at weblogic.rmi.internal.ServerRequest.sendReceive(ServerRequest.java:20
5)
        at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef
.java:335)
        at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef
.java:252)
        at net.htjs.service.ejb.xtzc.XtZc_q4cz52_EOImpl_923_WLStub.makeRegister(
Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.springframework.remoting.rmi.RmiClientInterceptorUtils.doInvoke(R
miClientInterceptorUtils.java:102)
        at org.springframework.ejb.access.SimpleRemoteSlsbInvokerInterceptor.doI
nvoke(SimpleRemoteSlsbInvokerInterceptor.java:75)
        at org.springframework.ejb.access.AbstractRemoteSlsbInvokerInterceptor.i
nvoke(AbstractRemoteSlsbInvokerInterceptor.java:119)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
ReflectiveMethodInvocation.java:166)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynami
cAopProxy.java:204)
        at $Proxy37.makeRegister(Unknown Source)
        at net.htjs.web.actions.XtzcAction.doRegister(XtzcAction.java:128)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultA
ctionInvocation.java:404)
        at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(Defa
ultActionInvocation.java:267)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
nvocation.java:229)
        at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doInte
rcept(DefaultWorkflowInterceptor.java:221)
        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept
(MethodFilterInterceptor.java:86)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:224)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:223)
        at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
erStack.java:455)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
nvocation.java:221)
        at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(V
alidationInterceptor.java:150)
        at org.apache.struts2.interceptor.validation.AnnotationValidationInterce
ptor.doIntercept(AnnotationValidationInterceptor.java:48)
        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept
(MethodFilterInterceptor.java:86)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:224)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:223)
        at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
erStack.java:455)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
nvocation.java:221)
        at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.interc
ept(ConversionErrorInterceptor.java:123)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:224)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:223)
        at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
erStack.java:455)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
nvocation.java:221)
        at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept
(ParametersInterceptor.java:167)
        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept
(MethodFilterInterceptor.java:86)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:224)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:223)
        at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
erStack.java:455)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
nvocation.java:221)
        at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.inter
cept(StaticParametersInterceptor.java:105)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:224)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:223)
        at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
erStack.java:455)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
nvocation.java:221)
        at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(Checkbox
Interceptor.java:83)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:224)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:223)
        at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
erStack.java:455)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
nvocation.java:221)
        at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUp
loadInterceptor.java:207)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:224)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:223)
        at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
erStack.java:455)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
nvocation.java:221)
        at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(
ModelDrivenInterceptor.java:74)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:224)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:223)
        at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
erStack.java:455)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
nvocation.java:221)
        at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.inte
rcept(ScopedModelDrivenInterceptor.java:127)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:224)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:223)
        at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
erStack.java:455)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
nvocation.java:221)
        at org.apache.struts2.interceptor.ProfilingActivationInterceptor.interce
pt(ProfilingActivationInterceptor.java:107)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:224)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:223)
        at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
erStack.java:455)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
nvocation.java:221)
        at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.interce
pt(DebuggingInterceptor.java:206)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:224)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:223)
        at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
erStack.java:455)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
nvocation.java:221)
        at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(Cha
iningInterceptor.java:115)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:224)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:223)
        at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
erStack.java:455)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
nvocation.java:221)
        at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInt
erceptor.java:143)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:224)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:223)
        at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
erStack.java:455)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
nvocation.java:221)
        at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(Pr
epareInterceptor.java:121)
        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept
(MethodFilterInterceptor.java:86)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:224)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:223)
        at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
erStack.java:455)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
nvocation.java:221)
        at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(Ser
vletConfigInterceptor.java:170)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:224)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:223)
        at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
erStack.java:455)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
nvocation.java:221)
        at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasI
nterceptor.java:123)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:224)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:223)
        at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
erStack.java:455)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
nvocation.java:221)
        at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.inter
cept(ExceptionMappingInterceptor.java:176)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:224)
        at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
ActionInvocation.java:223)
        at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
erStack.java:455)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
nvocation.java:221)
        at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.j
ava:50)
        at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.jav
a:504)
        at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatc
her.java:419)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.ja
va:42)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio
n.run(WebAppServletContext.java:3242)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate
dSubject.java:321)
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:
121)
        at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppS
ervletContext.java:2010)
        at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletC
ontext.java:1916)
        at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.j
ava:1366)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)
Caused by: java.lang.RuntimeException: Unexpected Exception
        at weblogic.rmi.extensions.RemoteRuntimeException.writeReplace(RemoteRun
timeException.java:38)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at java.io.ObjectStreamClass.invokeWriteReplace(ObjectStreamClass.java:1
004)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1036)

        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java
:1375)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:13
47)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.jav
a:1290)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)

        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
        at weblogic.rmi.extensions.server.CBVOutputStream.writeObject(CBVOutputS
tream.java:91)
        at weblogic.rmi.internal.ServerRequest.unmarshalThrowable(ServerRequest.
java:349)
        at weblogic.rmi.internal.ServerRequest.getThrowable(ServerRequest.java:6
2)
        at weblogic.rmi.internal.ServerRequest.sendReceive(ServerRequest.java:20
3)
        ... 123 more
Caused by: java.lang.ClassNotFoundException: com.opensymphony.xwork2.util.XWorkL
ist:  This error could indicate that a component was deployed on a  cluster memb
er but not other members of that cluster. Make sure that any component deployed
on a server that is part of a cluster is also deployed on all other members of t
hat cluster
        at weblogic.j2ee.ApplicationManager.loadClass(ApplicationManager.java:21
8)
        at weblogic.j2ee.ApplicationManager.loadClass(ApplicationManager.java:85
)
        at weblogic.common.internal.WLObjectInputStream.resolveClass(WLObjectInp
utStream.java:61)
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:154
4)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1466)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1
699)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:19
08)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1832)

        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1
719)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
        at weblogic.rmi.extensions.server.CBVInputStream.readObject(CBVInputStre
am.java:55)
        at weblogic.rmi.internal.ServerRequest.copy(ServerRequest.java:261)
        at weblogic.rmi.internal.ServerRequest.sendReceive(ServerRequest.java:16
6)
        at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef
.java:335)
        at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef
.java:252)
        at net.htjs.service.ejb.system.GaSystem_6uq8bi_EOImpl_923_WLStub.insertX
T_USER(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.springframework.remoting.rmi.RmiClientInterceptorUtils.doInvoke(R
miClientInterceptorUtils.java:102)
        at org.springframework.ejb.access.SimpleRemoteSlsbInvokerInterceptor.doI
nvoke(SimpleRemoteSlsbInvokerInterceptor.java:75)
        at org.springframework.ejb.access.AbstractRemoteSlsbInvokerInterceptor.i
nvoke(AbstractRemoteSlsbInvokerInterceptor.java:119)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
ReflectiveMethodInvocation.java:166)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynami
cAopProxy.java:204)
        at $Proxy57.insertXT_USER(Unknown Source)
        at net.htjs.service.bo.xtzc.impl.IBoXT_ZCXXImpl.makeRegister(IBoXT_ZCXXI
mpl.java:182)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflecti
on(AopUtils.java:296)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJo
inpoint(ReflectiveMethodInvocation.java:177)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
ReflectiveMethodInvocation.java:144)
        at org.springframework.transaction.interceptor.TransactionInterceptor.in
voke(TransactionInterceptor.java:107)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
ReflectiveMethodInvocation.java:166)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynami
cAopProxy.java:204)
        at $Proxy59.makeRegister(Unknown Source)
        at net.htjs.service.ejb.xtzc.XtZcBean.makeRegister(XtZcBean.java:227)
        at net.htjs.service.ejb.xtzc.XtZc_q4cz52_EOImpl.makeRegister(XtZc_q4cz52
_EOImpl.java:71)
        at net.htjs.service.ejb.xtzc.XtZc_q4cz52_EOImpl_WLSkel.invoke(Unknown So
urce)
        at weblogic.rmi.internal.ServerRequest.sendReceive(ServerRequest.java:17
4)
        ... 123 more

    

      从异常信息中,很明显能看到是因为XWorkList类找不到的异常,这还不简单,把这个类加入ClassPath中不就搞定吗,事实上没那么简单

 

异常出现的场景

 

在A项目中的EJB去调用B项目中EJB时,传递的参数是由A项目中Struts2的Action自动封装的实体属性,在实体中包含有一个List类型的属性,在List类型的属性中存储的是String类型的值,在A项目中直接将该属性作为参数传递给B项目中的EJB接口方法,在调用B项目EJB时,就抛出以上异常。(太绕了,都把人看晕了,没办法,表达能力差)

 

问题解析

经过不断google,不断的log,怎么都找不到哪儿会少XWorkList类,我的EJB端使用的是Spring和IBatis,不会用到什么XWorkList啊,可明明报的就是EJB异常啊,会是什么问题呢,无意中将Action自动封装的实体属性中的List属性类型打印出来看看,看这个List到底是个什么类型(只有这个List是从Web端传递过来的),哈哈,祸害终于找到,原来这个List是个XWorkList类型,郁闷得出去抽根烟

 

回来了将XWork包放入EJB的classpath,可启动时就报错,先不看什么错误,想一想也不对啊,EJB端和XWork有什么关系,删除掉,直接对实体中的XWorkList转换成ArrayList,经过测试,OK,异常无影了

 

就这问题搞了我两天,差点放弃,不过在即将崩溃的尽头,将问题解决也是一大快事,在这里贴出来希望能对大家有所帮助

提交多行数据到Struts的ActionForm的List属性中 NULL 博文链接:https://arang.iteye.com/blog/420546 立即下载

相关推荐

NRF24L01模块的5个常见问题及解决方案:从信号干扰到功耗优化

本文深入探讨NRF24L01无线模块在STM32开发中的5大常见问题及解决方案,包括通信距离优化、数据丢失排查、电源噪声抑制、SPI通信故障处理以及低功耗设计。通过代码示例和电路图分析,提供实用的优化策略,帮助开发者提升无线通信的稳定性和效率。

weixin_28256233的博客 226

java.lang.ClassNotFoundException: com.businessobjects.servletbridge.session.BobjWebSessionMap

问题描述 使用weblogic 10.3.6 安装部署基于SAP的应用程序包时,日志内抛出以下异常信息: <Could not deserialize session data. java.lang.ClassNotFoundException: com.businessobjects.servletbridge.session.BobjWebSessionMap: This error could indicate that a component was deployed on a clust

weixin_42484547的博客 324

别再为电路自激发愁了:手把手教你用吸波材料搞定微波腔体谐振(附HFSS仿真设置)

本文详细解析了微波腔体谐振问题的工程解决方案,重点介绍了吸波材料的选型、安装工艺及HFSS仿真设置。通过实际案例和计算工具,帮助射频工程师有效抑制腔体自激,提升系统稳定性。特别适用于35GHz毫米波雷达等高频电路设计场景。

weixin_42662293的博客 383

Struts2 -- Jsp取action List及数据映射

<br /><br />在struts2里一般用标签struts-tags可以取得action里的List,只需要在jsp的属性和action属性映射起来就可以了。<br />但对于list的映射还是有一点需要注意到地方。<br />1. Action里List定义要用泛型<br />  如: ShoppingCartAction的orderDetails,<br />        public class ShoppingCartAction extends ActionSupport {<br /> 

huozhicheng的专栏 4631

手把手教你用 Docker 构建自己的 CentOS 基础镜像

目录一、准备CentOS基础镜像二、撰写Dockerfile三、构建Docker镜像四、生成Docker容器 相信码农们经常会听说:虚拟机将成为历史,Docker才是未来 !!! 事实如此,现在大部分公司都在用 Docker 技术,想拥有自己的 Docker 专属镜像,那么 Dockerfile 就是入门,现在让我们一起来看一下 ------ 构建 Docker 镜像的全过程。 好文章 记得收藏...

Nick.Peng's Blogs 1万+

手把手教你用Docker快速部署开源MES系统(附避坑指南)

本文提供了一份详细的实战指南,手把手教你使用Docker容器化技术快速部署开源MES系统。内容涵盖从环境准备、项目选型、数据库配置到应用服务器优化、前端部署及生产环境监控的全流程,并附有避坑指南,旨在帮助中小制造企业IT人员和开发者低成本、高效率地构建智能制造解决方案。

f0g1h2的博客 1058

道听途说Struts2之7:使用Action属性接收参数

我们需要在Action中接收从页面传递过来的参数,但是在Action中并没有request,session,application对象,这个就不能像我们在jsp、servlet中那样接收参数了。但是struts已经想到了这一点,也已经设计好了方法帮助我们去接收参数。          下面看一个Action类:        package com.mengxiangyue.struts2.u

孟祥月的专栏 1954

springboot + netty 实现多客户端登录 超出设备 并下线

本文档旨在详细描述多平台登录控制的需求和实现方案。当前系统仅支持单设备登录,需扩展为支持多设备同时在线,并提供多种登录策略。文档详细列出四种策略:单平台登录、双平台登录、三平台登录和多平台同时在线,每种策略的具体限制和支持平台。技术实现方案包括数据结构设计、NettyUtils 工具类方法、WebSocketHandler 修改,以及相应的测试方案

Likefr 1877

struts 中关于集合list的使用

struts 可以对基本的数据类型进行自动赋值,如string,int,但是如果在jsp中设置一个 类型,并且在form中定义 private List testList;~~~那么可以在对该list进行赋值,但是进入jsp页面再进入action的时候,赋值的信息会丢失.这是因为从jsp到action,request对根据jsp对form重新赋值,但是只能给简单类型赋值,它无法判断这是list类型

adevotee的专栏 896

Labview 机器视觉(4)之 图像处理进阶 - 动态ROI与批量保存

本文深入探讨了LabVIEW机器视觉中动态ROI与批量保存两大进阶技术。动态ROI通过模式匹配或粒子分析实现检测区域的自动追踪,解决了产品位置变化带来的挑战。同时,文章详细介绍了如何设计高效的文件命名规则与异步保存机制,以实现海量图像数据的批量保存与管理,从而构建稳定、高效的工业自动化检测系统。

weixin_29234423的博客 218

rk628d修改默认分辨率

在rk3568上使用628d hdmi转mipi,在628d已经调试好的情况下,客户新增需求:视频输入这边的推荐分辨率固定在1024x768。

m0_60805802的博客 2052

struts2向标签s:textfield/输出action中值

anhuixiaozi的专栏 4648

产品路线图的三种模型(RICE/MoSCoW/Kano),教你如何对需求进行优先级排序

RICE/MoSCoW/Kano三种模型,教你如何对需求进行优先级排序。 也许你会让业务提供一份ROI,记得前不久参加过一场立项会评审,一位很有意思的小产品在会上讲不清楚ROI,评审们要求会后重新梳理,小产品表达不要为难业务方干一些他们不擅长的事了。这个看似笑话的经历,背后隐藏着价值判断已经流于形式。 也许你会要求业务方直接给出需求优先级列表,把任务分为P0到P5,这样的划分除了按需求本质的优先级还同时考虑了开发资源、开发难度等问题。毫不夸张地说,我曾经拿到一张全是P0级别的需求清单,如果一切任务都是高

wenyusuran的专栏 5538

struts2-action修改信息之下拉列表

action中:定义一个List用于存放对象信息,并设置set方法用于赋值,get方法用于jsp页面的获取然后在action的对应方法中调用set设值。JSP页面中:list="action中定义的属性名" listKey="传到后台的值" listValue="下列表显示的值" name="ModelDriven在对象中取的属性名" -- 取得的值是listKey的值...

积微成著 269

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

struts2标签循环显示List中的数组

jsp代码:  departmentDate为Action中的List对象,该List对象里装载着String[]数组对象,页面端通过struts标签循环显示,每一个String[]数组对象显示一行

zmh0704的专栏 3036

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

关于struts2的checkboxlist、select等标签发生could not be resolved as a collection/array/map/enumeration/iterat

struts2的checkboxlist,select等标签发生could not be resolved as a collection/array/map/enumeration/iterat错误。控制台信息如下: tag 'select', field 'list', i

TangShi2011的专栏 3525

关于Struts2 Action中的setter&&getter

Setter&&Getter方法可以接收客户端传过来的值,直接set到Action所定义的属性中。例如,用户登录界面,有用户名 密码文本框,点击“登录”按钮时,会根据文本框的name属性,找到对应LoginAction中的set方法,直接将客户端传过来的值设置到username password属性中。      当取出用户信息时。回调用get方法。

qq_25835219的博客 462

jsp select初始化赋值_js添加select下默认的option的value和text的方法

jsp 中的下拉框标签:multiple="true"意思是支持选择多个。js中灵活创建select标签下的项的方式:var oSelect = $("sjx"); //sjx为html或jsp页面上的select标签的id,如果使用Extjs的话,可以用EXT.getDom('sjx')获取标签var oOption = document.createElement("OPTION"); //j...

weixin_39530647的博客 942

Struts2-向值栈中存放数据

1.第一种 获取值栈对象,调用值栈对象里面的set方法(该方法添加的是一个Map集合) //第一种方式,使用值栈对象获取对象里面的set方法 //1.获取值栈对象 ActionContext context = ActionContext.getContext(); ValueStack stack = context.getValueStack(); //2.调用方法set方法 stack.set("username","w

Kevinnsm的博客 331

Struts2获取表单数据

Struts2 提供三种数据封装的方式 1. Action 本身作为model对象,通过成员setter方法进行封装 2. 创建独立model对象,页面通过ognl表达式封装 3. 实现ModelDriven接口,对请求数据进行封装准备jsp文件: form.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-

一个无限死循环的博客 477

五 Struts2之类型转换

五 Struts2之类型转换

dtijcfrhb的博客 157

struts2中下拉框中标签<s:select>各个属性的使用

    最近接触struts2框架比较多,从中也碰到一些细节的问题,做的时候有些纠结,现在整理一下。     1、若想在下拉框中默认显示修改前的数据,要把&lt;s:select&gt;标签中的value值设为表示该数据在数据库中对应的guid值。    2、list属性后的数据结构(Map、List等),在Action中定义时不能赋值为null,否则无法显示。   3、若想要heade...

Java成长之路 453

Struts2的select使用及默认值的测试

Struts2的select使用及默认值的测试 struts2的select标签中,常用的有以下几个属性: (1)struts2中的select 标签中,必须设置的属性只有一个,即是list。 (2)select标签的list中必须有值,不然会报错。如果没有值,可以加上headerKey, headerValue,这样就可以通过了 其中,即使list中有值,我们也通常会加上headerKey, headerValue,即列表中显示的第一个选项。注意,headerKey不可以为空,不可以为-1

liuzejian4的专栏 1541
上一篇: Js(Css)动态引用方法–Js(css)的统一管理
下一篇: Eclipse快捷键总结
javaRwx
博客等级 码龄20年 0粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值