在我的项目中,我正在更新详细信息,因此我创建了操作,但它在响应中给出了异常
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>
Ajax Call
function checkPersonal(id) {
if (checkEverythingP()) {
$.ajax({
type : 'POST',
url : 'savePersonalDetails',
data : $('#personalform').serialize(),
success : function(data) {
alert('success');
},
error : function() {
alert('error');
}
});
}
}
它在JQuery中给了我成功的消息,但它没有去声明的动作类。一切都是正确的,我不明白为什么会发生这种情况。我为此提到了很多网站但没有解决。请告诉我出了什么问题。
答案 0 :(得分:2)
并非所有内容都符合您的想法,因为在success
回调函数中,您收到了INPUT
个结果。此结果由workflow
interceptor返回,defaultStack
位于inputResultName
- 默认情况下使用的拦截器堆栈(如果您的操作未覆盖拦截器配置)。它检查操作调用是否包含操作错误或字段错误(转换错误)等验证错误,然后返回参数validation
指定的结果。默认情况下,此参数设置为“input”。如果拦截器返回一个结果,它会破坏一系列拦截器并调用action方法。你注意到它说它没有进入声明的动作类。
解决方案是覆盖动作的拦截器配置以使用基本堆栈,即没有workflow
和/或<action name="savePersonalDetails" class="org.employee.actions.EmployeeMyProfileAction" method="updateEmployeeDetails">
<interceptor-ref name="basicStack"/>
<result name="success">empMyProfile.jsp</result>
</action>
拦截器。
workflow
如果您仍需要执行验证,则可以以编程方式或配置{{1}}拦截器来过滤您的操作方法。只有在你有足够理由这样做时才应该使用的最后一个选项,因为它克服了拦截器本身的目的。
答案 1 :(得分:1)
假设你知道what the INPUT result is and how it works,你在这里做错了。
当您执行AJAX调用时,1)结果将在您当前页面中被解析(然后最终注入),或者,您可以使用该结果通过使用javascript(window.location = "newUrl";
来执行重定向)。
您无法返回整个页面,然后使用该响应创建新页面(除非在iframe或类似内容中,但该DOM /页面操作,然后是案例1)。
然后这个
<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>
不对,因为两者结果应该是整个页面(如果是经典POST)或JSP片段/ JSON /其他(如果是AJAX CALL) )。
您应该将其更改为
<action name="savePersonalDetails" class="org.employee.actions.EmployeeMyProfileAction" method="updateEmployeeDetails">
<result name="success">emp-personal-form.jsp</result>
<result name="input">emp-personal-form.jsp</result>
<result name="error">emp-personal-form.jsp</result>
</action>
并在emp-personal-form.jsp
的第一行包含错误消息(如果是INPUT或ERROR结果),或者包含成功消息(如果是SUCCESS结果),然后提供一个导航链接从页面。
否则,使用标准POST并在INPUT或ERROR的情况下返回相同的页面,或者在成功的情况下返回成功页面:
<action name="savePersonalDetails" class="org.employee.actions.EmployeeMyProfileAction" method="updateEmployeeDetails">
<result name="success">profileCorrectlyUpdated.jsp</result>
<result name="input">empMyProfile.jsp</result>
<result name="error">empMyProfile.jsp</result>
</action>
但是在成功的情况下,没有什么能阻止你使用标准的POST并在同一页面中返回。
注意:要知道如何仅在需要时显示(成功或错误)消息,read this。