Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在同一页上获得结果为什么需要输入?_Java_Jquery_Ajax_Validation_Struts2 - Fatal编程技术网

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

Java 如何在同一页上获得结果为什么需要输入?,java,jquery,ajax,validation,struts2,Java,Jquery,Ajax,Validation,Struts2,在我的项目中,我正在更新详细信息,所以我创建了操作,但作为响应,它给了我异常 No result defined for action org.employee.actions.EmployeeMyProfileAction and result input 在struts.xml(之前) 它在JQuery中向我提供了成功消息,但它不会发送到声明的action类。我不明白为什么一切都是正确的。我参考了许多网站,但没有解决这个问题。请告诉我哪里出了问题。假设你知道,你在做错事 当您执行AJAX调

在我的项目中,我正在更新详细信息,所以我创建了操作,但作为响应,它给了我异常

No result defined for action org.employee.actions.EmployeeMyProfileAction and result input
struts.xml
(之前)

它在JQuery中向我提供了成功消息,但它不会发送到声明的action类。我不明白为什么一切都是正确的。我参考了许多网站,但没有解决这个问题。请告诉我哪里出了问题。

假设你知道,你在做错事

当您执行AJAX调用时,1)结果将被解析(然后最终注入)到当前页面中,或者,您可以使用javascript(
window.location=“newUrl”
)使用该结果执行重定向

您不能返回整个页面,然后使用该响应创建新页面(除非在iframe或类似文件中,但这是DOM/页面操作,然后是案例1)

那么这个


并非一切都如您所想是正确的,因为在
成功
回调函数中,您收到了
输入
结果。此结果由返回,它位于
defaultStack
中,如果您的操作未覆盖拦截器配置,则默认情况下使用的拦截器堆栈。它检查操作调用是否有验证错误,如操作错误或字段错误(转换错误),然后返回由参数
inputResultName
指定的结果。默认情况下,此参数设置为“输入”。如果拦截器返回一个结果,它将断开拦截器链并调用action方法。您注意到它说它不去声明的action类

解决方案是覆盖操作的拦截器配置以使用基本堆栈,即没有
验证
和/或
工作流
拦截器

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

empMyProfile.jsp

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

很可能发生了一些错误,并返回了
input
result。在我添加拦截器ref标记后,控件没有进入指定的操作方法类。我不知道为什么它不去。我检查了请求和响应,作为响应,它给出了页面。好的,再试一次。假设您不了解什么是自定义堆栈。谢谢,Roman,在添加
error emp personal form.jsp
后,它现在可以工作了。如果这个答案帮助您解决了一个问题,您应该将其标记为已接受的解决方案,并在可能的情况下进行升级。注意。@MB:所以你是在破解错误,而不是修复它。
<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');
            }
        });
    }
}
<action name="savePersonalDetails"  class="org.employee.actions.EmployeeMyProfileAction" method="updateEmployeeDetails">
  <interceptor-ref name="basicStack"/>
  <result name="success">empMyProfile.jsp</result>
</action>