java - 在 Struts 2 中使用自动完成后,没有为操作定义结果

标签 java jsp struts2 autocomplete struts2-jquery

我收到错误“未为结果输入的操作定义结果”。直到我使用 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>
            &nbsp;&nbsp;        
            <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/

相关文章:

java - 多维对象数组行为

java - Apache poi XSSF 创建 Excel 文件 - 创建返回空文件,格式或文件扩展名无效?

html - 在 Eclipse 中开发时在哪里存储 twitter bootstrap

java - 尝试显示 jsp 时出现 404 错误

java - 在struts2 xml中传递特定参数时出现异常

jsp - 如何使用 <s :property> tag in <s:text> in struts 2

即使工作正常,Java 方法创建也无法读取

java - 在 web.xml 中添加 spring-dispatcher-servlet.xml 配置时出现错误

java - 在 JSP 中显示上传的图像

hibernate - Postgresql 与 Struts 2/Hibernate/Maven 和 Spring 的连接