栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

意外的异常捕获到对“类xxx”的设置“ xxx”:设置值为['x',]的表达式'xxx'时出错

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

意外的异常捕获到对“类xxx”的设置“ xxx”:设置值为['x',]的表达式'xxx'时出错

这里不涉及数组问题(即使看起来像这样):这种异常意味着Struts找不到参数的Setter:

从ParametersInterceptor文档中:

警告缺少参数

如果没有给定参数名称的设置器,则将在devMode中记录如下警告消息:

SEVERE: Developer Notification (set struts.devMode to false to disable

this
message):
Unexpected Exception caught setting ‘search’ on ‘class
demo.ItemSearchAction:
Error setting expression ‘search’ with value [‘search’, ]
Error setting expression ‘search’ with value [‘search’, ] - [unknown
location]
at
com.opensymphony.xwork2.ognl.OgnlValueStack.handleRuntimeException(OgnlValueStack.java:201)
at
com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:178)
at
com.opensymphony.xwork2.ognl.OgnlValueStack.setParameter(OgnlValueStack.java:152)


因此,期望的行为是允许开发人员在参数名称或设置器中发现丢失的设置器或错字。

通过将JSP中不存在的元素放入Action中,可以轻松地重现此错误。

由于您的属性在模型中存在(及其设置器),并且您正在使用

ModelDriven
paramsPrepareParamsStack
,所以我认为是:

  • ModelDriven Interceptor
    被委托处理Model对象;
  • 第一次致电
    Parameters Interceptor
    ModelDriven Interceptor
    尚未运行;
  • 然后,您的操作对Model对象一无所知,并尝试在Action中而不是在Model中找到参数的Setter。
  • 相反,第二个拦截器在ModelDriven拦截器之后运行,并且确切知道在哪里设置参数。这就是为什么要在Action方法中正确设置参数的原因。

但是,如果这是真的,那么您应该 不能

prepare()
方法中检索那些参数(这就是您使用此堆栈的原因…):
请尝试,然后将结果发布在此处。

解决此问题的第一件事是将第一个放置

ModelDriven Interceptor
在第一个位置
ParametersInterceptor
(通过复制或移动它,我不确定这两种方式都可能产生哪种副作用(如果有)情况下,您应该再次尝试并在此处进行报告)。

然后定义以下堆栈,并使用它。

    <interceptor-stack name="modelParamsPrepareParamsStack">        <interceptor-ref name="exception"/>        <interceptor-ref name="alias"/>        <interceptor-ref name="i18n"/>        <interceptor-ref name="checkbox"/>        <interceptor-ref name="multiselect"/>        <!-- NEW ModelDriven Position -->        <interceptor-ref name="modelDriven"/>        <interceptor-ref name="params"> <param name="excludeParams">^dojo..*,^struts..*,^session..*,^request..*,^application..*,^servlet(Request|Response)..*,^parameters..*,^action:.*,^method:.*</param>        </interceptor-ref>        <interceptor-ref name="servletConfig"/>        <interceptor-ref name="prepare"/>        <interceptor-ref name="chain"/>        <!-- OLD ModelDriven Position -->        <!--interceptor-ref name="modelDriven"/-->        <interceptor-ref name="fileUpload"/>        <interceptor-ref name="staticParams"/>        <interceptor-ref name="actionMappingParams"/>        <interceptor-ref name="params"> <param name="excludeParams">^dojo..*,^struts..*,^session..*,^request..*,^application..*,^servlet(Request|Response)..*,^parameters..*,^action:.*,^method:.*</param>        </interceptor-ref>        <interceptor-ref name="conversionError"/>        <interceptor-ref name="validation"> <param name="excludeMethods">input,back,cancel,browse</param>        </interceptor-ref>        <interceptor-ref name="workflow"> <param name="excludeMethods">input,back,cancel,browse</param>        </interceptor-ref>    </interceptor-stack>

希望能有所帮助。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/485954.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号