首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring AOP注入PortletRequest

Spring AOP注入PortletRequest
EN

Stack Overflow用户
提问于 2010-07-26 21:54:12
回答 2查看 1.2K关注 0票数 2

我正在尝试将portletrequest注入到我的方面类中

代码语言:javascript
复制
@Autowired(required = true)
private PortletRequest request;

@Before("execution(* de.ac.mis.dao.*.getSessionFactory())")
public void setUsername() {
    System.out.println("Now I'm setting the username " + this.request);
}

只给了我一个

代码语言:javascript
复制
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No matching bean of type [javax.portlet.PortletRequest] found for dependency: 
expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

异常

但是我可以自动连接HttpServletRequest --我是不是遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-27 22:30:21

好的,在一些实验之后解决了它,也许它对其他人也有用

代码语言:javascript
复制
@Before("execution(* de.ac.mis.dao.acDynamicUserSessionFactory.getSessionFactory())")
public void setUsername(JoinPoint joinPoint) {
    acDynamicUserSessionFactory dao = (acDynamicUserSessionFactory) joinPoint.getTarget();
    RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
    String userName = "";
    if (requestAttributes instanceof PortletRequestAttributes) {
        PortletRequest request = ((PortletRequestAttributes) requestAttributes).getRequest();
        userName = request.getRemoteUser();
    } else if (requestAttributes instanceof ServletRequestAttributes) {
        HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
        userName = request.getRemoteUser();
    }
    dao.setUserName(userName);
    this.log.debug("acUserSessionfactory was set for user: " + userName);
}

这些配置的重要之处在于,请求资源(portlets或servlets)必须在spring上下文中运行,否则此时没有requestattribute可用。

票数 0
EN

Stack Overflow用户

发布于 2013-07-17 05:00:58

在看了JavaDocs之后,我选择了使用resolveReference,它声称:

至少:关键字"request“的HttpServletRequest/PortletRequest引用和关键字"session”的HttpSession/PortletSession引用。

示例代码:

代码语言:javascript
复制
RequestAttributes attrs = RequestContextHolder.getRequestAttributes();
// According to JavaDoc, PortletRequest should be available
PortletRequest request = (PortletRequest) attrs.resolveReference("request");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3335439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档