小编典典

如何在同一页面上获得结果,为什么需要输入?

ajax

在我的项目中,我正在更新详细信息,所以我创建了动作,但是它给了我例外

No result defined for action org.employee.actions.EmployeeMyProfileAction and result input

struts.xml(之前)

<action name="savePersonalDetails"  class="org.employee.actions.EmployeeMyProfileAction" method="updateEmployeeDetails">
        <result name="success">empMyProfile.jsp</result>
</action>

(后)

<action name="savePersonalDetails" class="org.employee.actions.EmployeeMyProfileAction" method="updateEmployeeDetails">
    <result name="success">empMyProfile.jsp</result>
    <result name="input">emp-personal-form.jsp</result>
</action>

阿贾克斯电话

function checkPersonal(id) {

    if (checkEverythingP()) {
        $.ajax({
            type : 'POST',
            url : 'savePersonalDetails',
            data : $('#personalform').serialize(),
            success : function(data) {
                alert('success');
            },
            error : function() {
                alert('error');
            }
        });
    }
}

它在JQuery中给我成功消息,但不会传递到声明的操作类。一切正确之后,我不明白为什么会发生这种情况。我为此提到了许多站点,但没有解决。请建议我出了什么问题。


阅读 188

收藏
2020-07-26

共1个答案

小编典典

并非所有的事情都是您想的那样正确,因为在success回调函数中您已经收到INPUT结果。该结果由workflow拦截器返回,该拦截器位于defaultStack-如果您的操作未覆盖拦截器配置,则默认使用的拦截器堆栈中。它检查动作调用是否具有验证错误(例如动作错误或字段错误(转换错误)),然后返回参数指定的结果inputResultName。默认情况下,此参数设置为“输入”。如果拦截器返回结果,则会中断一系列拦截器并调用动作方法。您注意到它说
这不是要声明的动作类

解决方案是重写操作的拦截器配置以使用基本堆栈,即不使用validation和/或使用workflow拦截器。

<action name="savePersonalDetails"  class="org.employee.actions.EmployeeMyProfileAction" method="updateEmployeeDetails">
  <interceptor-ref name="basicStack"/>
  <result name="success">empMyProfile.jsp</result>
</action>

如果您仍然需要执行验证,则可以通过 编程
或配置workflow拦截器来过滤您的操作方法。仅当您有足够的理由时才应使用最后一个选项,因为它克服了拦截器本身的目的。

2020-07-26