我有带有不同(HTML和JSON)结果类型的Struts2操作。他们使用通用拦截器。
如果需要拦截请求,如何根据给定的操作结果类型返回结果?
例如,我Action.ERROR
转发到JSP页面。如果操作是JSON类型,我想转发JSON错误。
我有带有不同(HTML和JSON)结果类型的Struts2操作。他们使用通用拦截器。如果需要拦截请求,如何根据给定的动作结果类型返回结果?
例如,我的Action.ERROR转发到JSP页面。如果操作是JSON类型,我想转发JSON错误。请指教。
尽管确实没有 类型 ,但如果以AJAX方式调用Action,例如返回JSON的Action,则其所有结果 都应
具有相同的结果类型(在这种情况下为JSON),这也是事实。您正在使用单个操作来执行不同的逻辑操作(ajax和non-ajax操作,这是一种反模式);
就是说,如果您想从所有Action(每个都有其结果类型的Action)使用的Interceptor内部返回正确的 GLOBAL错误结果
,则基于它们的 _ 其他 结果类型( SUCCESS
_ 假设:,假设每个Action都有一个SUCCESS
结果),这是做它的方式:
public String intercept(ActionInvocation invocation) throws Exception {
// Get the action configuration defined in struts.xml
ActionConfig config = invocation.getProxy().getConfig();
// Get the SUCCESS result configured for that Action
ResultConfig success = config.getResults().get("success");
// Get the class of the SUCCESS result
Object clazz = success.getClass();
/* .... oops, some error occurred !!
We now need to redirect to the right global error result .... */
if (clazz instanceof org.apache.struts2.dispatcher.ServletDispatcherResult) {
log.debug("Struts2 Result type: CLASSIC");
return "error";
} else if (clazz instanceof org.apache.struts2.json.JSONResult) {
log.debug("Struts2 Result type: JSON");
return "jsonError";
} else {
log.debug("Struts2 Result type: SOMETHING ELSE, returning default ");
return "error";
}
}
尽管从技术上讲这是可行的,但我不鼓励这样做,因为……没有真正的理由这样做。
为了您的目的,请记住 每个 全局结果 都在其范围内 <package>
;
因为您可以(/应该)为Classic Actions(<package>
扩展名struts-default
)和JSON
Actions(<package>
扩展名)具有两个不同的包json-default
,所以您可以 为每个具有相同名称但结果类型不同的包 简单地
定义两个不同的全局错误结果 ;这样,拦截器将相对于当前Action的程序包调用一个,从而输出所需的结果。
问题内容: 我有以下动作映射 我可以使用Interceptor中的以下行获取参数映射 就像上面一样, 有什么方法可以获取 以下映射中定义的 拦截器参数 。 动作参数按以下方式定义,动作参数和拦截器参数应分别可访问。 请注意,我不想在拦截器中将参数字段声明为 在Dev Blanked的攻击之后,我实现了他的技术。它没有用,所以我在这里共享我的代码。我正在使用Struts 2.3.1.2。 图书馆 a
我试图在javascript中为fetch创建一个拦截器(更具体地说是React)。它应该从每次调用的fetch中获取结果,如果是401错误,它应该向另一个路由发起新的fetch调用,以获取cookie(刷新令牌)。然后,应该再次尝试原始的fetch调用(因为现在用户已经登录)。 我已经成功地触发了新的fetch调用,并为每个调用发回了cookie,但我遇到了以下两个问题: 我似乎在使用async
问题内容: 如何在Hibernate拦截器中获取Hibernate会话? 我正在尝试使用Hibernate通过组织ID透明地强制执行数据访问。我设置了一个全局筛选器,以按组织ID筛选所有查询。现在,在保存/更新之前,我需要使用实体拦截器在所有实体上设置组织ID。 组织ID来自HttpSession 我已经在Hibernate会话中将Organizational Id设置为Filter属性,我想在我
我有一个OkHttp拦截器,当请求得到401 HTTP错误时,它应该请求一个令牌。现在,登录服务的请求完成了,但随后链路中断,原始请求不再重试。下面是我的拦截器的拦截方法: reLogin()方法是: 新:正如Mitesh Machhoya所说,我尝试了两个不同的改型实例,一个带有拦截器的okhttp客户端,另一个没有。现在登录调用没有被拦截,但是拦截器的执行被中断了,我的意思是这个类的日志跟踪是
问题内容: 我尝试了一些来自hibernate 4.0拦截器的 代码,该代码为使用会话级拦截器提供了以下代码: 但是,我同时检查了hibernate-core 4.0源代码和onliehibernate 4.0 java- doc ,该类没有方法,但是hibernate 3.6 java- doc确实具有此方法。 有人知道该方法移到哪里吗?如果已弃用,为什么文档仍将其保留在教程文档中?在4.0中如
在Spring MVC控制器中,我可以使用@PathVariable获取路径变量,以获取在@RequestMapping中定义的变量的值。如何在拦截器中获取变量的值? 非常感谢你!