Не определен результат для действия после использования автозаполнения в Struts 2

Я получаю сообщение об ошибке Нет результата, определенного для действия для ввода результата. Это не было до тех пор, пока я не использовал автозаполнение Struts2.

Это мой код автозаполнения:

<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 это не показывает эту ошибку. Но действие, определенное для отправки формы, также не работает. Я не понимаю, где мне нужно внести изменения после добавления этого автозаполнения. Пожалуйста помоги.

1 ответ

Когда вы вызываете какое-либо действие из слоя представления, перехватчики запускаются до того, как действие будет выполнено.

Кажется, ваши действия используют стек по умолчанию, который включает validation а также workflow перехватчики. Первый перехватчик выполняет проверки действий, которые расширяют ActionSupport, вторая проверка, если были ошибки INPUT результат возвращается.

Но если вы используете некоторые -validation.xml или проверки на основе аннотаций для класса действий, поэтому каждое действие, отображающее метод этого класса, проверяется перехватчиками, указанными выше, если только вы не настроили эти перехватчики для исключения метода или не используете метод проверки с префиксом, или аннотация пропуска проверки применяется.

Все эти случаи, чтобы избежать запуска валидаторов для кода, который не использовался какими-либо действиями и должен избегать их или реконфигурировать стек перехватчиков для работы без этих перехватчиков.

В вашем случае действие, которое возвращает json результат не требует проверки полей, а не term, Как настроить и переопределить конфигурацию перехватчиков действия, смотрите в вопросе: Как получить результат на той же странице, почему требуется ввод?,

Рабочий пример, который использует Select Box с JSON Result в качестве автозаполнения.
Исходный код действий, используемый в примере.

Другие вопросы по тегам