我收到错误“未为结果输入的操作定义结果”。直到我使用 Struts 2 自动完成功能时它才出现。
这是我的自动完成
代码:
<s:form class="form-horizontal" style="margin:0 auto" role="form" theme="simple" action="Reports_open_cases">
<h4>Open Cases</h4>
..some controls here
<div class="form-group">
<div class="col-xs-12 col-sm-4 col-md-4"></div>
<div class="col-xs-12 col-sm-4 col-md-4" >
<s:url id="advURL" action="xyz_action"/>
<sj:select
id="abc"
name="abc" selectBoxIcon="true"
href="%{advURL}"
list="list_abc"
listValue="name"
listKey="Id "
autocomplete="true"
cssClass="form-control"
/>
</div>
<div class="col-xs-12 col-sm-12 col-md-12 pull-right" style="text-align:right"><br>
<div class="modal-footer" style="margin:0px; padding:10px 0px 10px">
<button class="btn btn-success" type="submit">Generate</button>
<button class="btn btn-default" type="Reset">Reset</button>
</div>
</div>
</s:form>
我的struts.xml
(操作):
<constant name="struts.devMode" value="true" />
<constant name="struts.multipart.maxSize" value="20000000" />
<package name="login" extends="struts-default,json-default" namespace="/">
<interceptors>
<interceptor class="vercelon.actions.LoginInterceptor" name="loginInterceptor">
</interceptor>
<interceptor-stack name="loginStack">
<interceptor-ref name="loginInterceptor"/>
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="fileUpload"><param name="maximumSize">10485760</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<action name="Reports_open_cases" class="vercelon.actions.Report"
method="Generate_OpenCases">
<result name="success">/CMS/Reports_OpenCases.jsp</result>
<result name="ERROR">/Error.jsp</result>
<result name="input">/CMS/Reports_Menu.jsp</result>
</action>
<action name="xyz_action" class="vercelon.actions.Report" method="loadreports">
<result name="success" type="json"></result>
</action>
除了将下拉列表替换为自动完成之外,我没有进行任何其他更改。
当我向 struts.xml
添加输入时,它不会显示此错误。但是为我的表单提交定义的操作也不起作用。
我不明白添加此自动完成功能后需要在哪里进行更改。
最佳答案
当您从 View 层调用某些操作时,拦截器会在执行该操作之前运行。
似乎您的操作使用默认堆栈,其中包括验证
和工作流
拦截器。第一个拦截器对扩展 ActionSupport
的操作执行验证,第二个拦截器检查是否存在错误,并返回 INPUT
结果。
但是,如果您在操作类上使用一些 -validation.xml
或基于注释的验证,那么映射该类的方法的每个操作都会由上面的拦截器进行验证,除非您配置了这些拦截器排除方法,或使用基于前缀的验证方法,或应用跳过验证注释。
所有这些情况都是为了避免为某些操作未使用的代码运行 validator ,并且需要避免它们或重新配置拦截器堆栈以在没有这些拦截器的情况下运行。
在您的情况下,返回 json
结果的操作不需要验证字段而不是 term
。如何配置和覆盖操作的拦截器配置请参阅有问题的:How to get result on same page why input is required? .
使用 Select Box with JSON Result as Autocompleter 的工作示例.
自动完成器
的源代码 The actions source code used in the example .
关于java - 在 Struts 2 中使用自动完成后,没有为操作定义结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26360432/