我收到错误:
没有为操作和结果“输入”定义结果。
直到我使用 Struts 2 自动完成时它才出现。
这是我的
autocomplete
代码:
<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
时,它不会显示此错误。但为我的表单定义的操作也不起作用。
我不明白添加此自动完成功能后需要在哪里进行更改。
当您从视图层调用某些操作时,拦截器会在操作执行之前运行。
似乎您的操作使用默认堆栈,其中包括
validation
和 workflow
拦截器。第一个拦截器对扩展 ActionSupport
的操作执行验证,第二个拦截器检查是否存在错误,然后返回 INPUT
结果。
但是,如果您在操作类上使用一些
-validation.xml
或基于注释的验证,那么映射到此类方法的每个操作都会由上面的拦截器进行验证,除非您已将这些拦截器配置为排除方法,或者使用基于前缀的方法验证方法,或跳过验证注释被应用。
所有这些情况都是为了避免对某些操作未使用的代码运行验证器,并且需要避免它们或重新配置拦截器堆栈以在没有这些拦截器的情况下运行。
在您的情况下,返回
json
结果的操作不需要验证字段而不是 term
。如何配置和覆盖相关操作的拦截器配置:如何在同一页面上获取结果,为什么需要输入?.
使用 将 JSON 结果作为自动完成器的选择框的工作示例。
Autocompleter
的源代码示例中使用的操作源代码。