请注意,我不是Java开发人员所以我的问题可能有一些令人心碎的假设和无效的代码。
我有一个拦截器负责登录身份验证。
<global-results>
<result name="login">/admin/login.jsp</result>
</global-results>
如图所示,当身份验证失败时,它会重定向到login.jsp,即返回值为“login”(在这种情况下)
我想要实现的是,我返回一些其他值(比如“loginAjax”)并且它不应该发送HTTP 302,而应该返回一个JSON响应。
我不知道这是否可能。我在struts.xml中有另一个部分,它在从Action返回特定值时返回json。
<result name="success" type="json">
<param name="includeProperties">
return_id, return_message
</param>
</result>
我不知道我应该如何将两个部分绑在一起并使其适用于同一个拦截器。
答案 0 :(得分:1)
全局结果与一个或多个拦截器或动作无关:它对每个人都是全局的,因此无论是谁返回它都将在返回时呈现。
您需要添加一个全局(保持与其他登录结果一致,即全局)json类型的结果,如下所示:
<global-results>
<result name="login">/admin/login.jsp</result>
<result name="loginAjax" type="json" />
</global-results>
然后,您可以发送特定的statusCode或errorCode,like described here。
如果您需要了解应该从拦截器中的返回什么样的结果,您应该像描述in this other answer那样继续,通过检查它将被返回的结果类型如果成功。
P.S:哦,考虑聘请Java开发人员正确地做Java东西:)