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>