Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
完全困惑:Spring3.0.5自动布线的怪异行为_Spring_Jakarta Ee_Spring Mvc_Sitemesh_Wurfl - Fatal编程技术网

完全困惑:Spring3.0.5自动布线的怪异行为

完全困惑:Spring3.0.5自动布线的怪异行为,spring,jakarta-ee,spring-mvc,sitemesh,wurfl,Spring,Jakarta Ee,Spring Mvc,Sitemesh,Wurfl,我整天都在为一个非常简单的自动布线问题头疼。关于这个非常简单的问题,请提前发帖子,我很抱歉。我正在使用Spring3.0.5和MVC运行一个web应用程序,其中servlet上下文是myservlet.xml,与包含所有hibernate内容的应用程序配置webapp config.xml分开 基本上,我试图做的是将wurfl管理器连接到一个自定义sitemesh装饰器。这与sitemesh或wurfl无关,我只是尽可能多地提供信息。 以下是该部分的片段: public class MDecor

我整天都在为一个非常简单的自动布线问题头疼。关于这个非常简单的问题,请提前发帖子,我很抱歉。我正在使用Spring3.0.5和MVC运行一个web应用程序,其中servlet上下文是
myservlet.xml
,与包含所有hibernate内容的应用程序配置
webapp config.xml
分开

基本上,我试图做的是将
wurfl管理器
连接到一个自定义
sitemesh装饰器
。这与sitemesh或wurfl无关,我只是尽可能多地提供信息。 以下是该部分的片段:

public class MDecoratorMapper extends ConfigDecoratorMapper{
private String decoratorName = null;
@Autowired
WURFLManager wurflManager; // does not work, object is null
private Properties prop;
.........
}
我的应用程序配置
webapp config.xml
如下:

 <import resource="classpath:META-INF/model-config.xml"/>
<import resource="webapp-security.xml"/>
<import resource="wurfl.xml" />
<aop:aspectj-autoproxy proxy-target-class="true"/><!-- this is needed by apache shiro in spring-->

<context:component-scan base-package="com.bla.bla.web.controller.admin"/>
<context:component-scan base-package="com.bla.bla.web.controller.exception"/>

<bean id="propertyConfigurer"
      class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath:m.properties</value>
            <value>classpath:m.log4j.properties</value>
        </list>
    </property>
</bean>
其代码如下:

public class HibernateRealm extends AuthorizingRealm {

Logger logger = Logger.getLogger(HibernateRealm.class);

@Autowired
UserAccountService uAS; // this works no problem
@Autowired
RoleService roleService; // this also works
//.....
}
public class MDecoratorMapper extends ConfigDecoratorMapper{
private String decoratorName = null;
@Autowired
WURFLManager wurflManager; <!--this always return null-->
private Properties prop;

public void init(Config config, Properties properties, DecoratorMapper parent) throws InstantiationException {
    super.init(config, properties, parent);
    this.prop = properties;
//decoratorName = properties.getProperty("decorator.name", "mobile");
// ....
}
在这种情况下,自动布线工作正常,从来没有任何问题

现在让我们看一下这个上下文文件:
wurfl.xml

//@请求映射(“/site/authentication”) 公共类UserAccessController{

private static Logger logger = Logger.getLogger(UserAccessController.class);

@Autowired
UserAccountService userAccountService;
@Autowired
VerificationService verificationService;
@Autowired
EmailSender emailSender;
@Autowired
EmailTemplateService emailTemplateService;

@Autowired
Map<String, String> facebookAPI;
@Resource
@Qualifier(value = "roleLandingPage")
Map<String, String> roleLandingPage;
@Resource
@Qualifier(value = "usefulUrls")
Map<String, String> usefulUrls;
@Autowired
private WURFLManager wurflManager;


public UserAccessController(){

}


@RequestMapping(value = "/site/authentication/signup/form")
public ModelAndView showAccountRequestForm(HttpServletRequest request){
    net.sourceforge.wurfl.core.Device device = wurflManager.getDeviceForRequest(request);
    SignupForm form = new SignupForm();
    ModelMap map = new ModelMap();
    map.addAttribute("signupForm",form);
    map.addAttribute("message","");

    return new ModelAndView("signup",map);

}
private static Logger=Logger.getLogger(UserAccessController.class);
@自动连线
用户帐户服务用户帐户服务;
@自动连线
验证服务验证服务;
@自动连线
电子邮件发送者;
@自动连线
EmailTemplateService EmailTemplateService;
@自动连线
地图facebookAPI;
@资源
@限定符(value=“roleLandingPage”)
地图滚动页面;
@资源
@限定符(value=“usefulUrls”)
映射有用的URL;
@自动连线
私人WURFLManager WURFLManager;
公共用户访问控制器(){
}
@请求映射(value=“/site/authentication/signup/form”)
公共模型和视图showAccountRequestForm(HttpServletRequest){
net.sourceforge.wurfl.core.Device Device=wurflManager.getDeviceForRequest(请求);
SignupForm=新的SignupForm();
ModelMap=newmodelmap();
map.addAttribute(“signupForm”,表单);
map.addAttribute(“message”和“”);
返回新的ModelAndView(“注册”,地图);
}

我可以证明UserAccessController内部的这种自动连接是有效的,在调试期间,我使用Chrome的用户代理切换器进行了测试,它正在选择设备。所以为什么不在我的装饰器中:(

尝试将您的
wurfl.manager
作为自动连接的候选者

<bean id="wurfl.manager" class="net.sourceforge.wurfl.spring.SpringWurflManager" autowire-candidate="true">
     <property name="wurflModel" ref="wurfl.model" />
</bean>

您没有显示自定义的
MDecoratorMapper
是如何使用的。我很久没有使用SiteMesh了,但我希望
ConfigDecoratorMapper
是一个SiteMesh类,其生命周期由SiteMesh控制,而不是由Spring控制。因此,为什么您希望它得到一个注入实例?您如何告诉SiteMesh使用它他
MDecoratorMapper
?只有在Spring获得它时(或者如果您使用AspectJ字节码编织),才会得到一个注入的代码.

在您的代码中,我在xml配置中没有看到wurfl.manager bean定义,它在那里吗?如果没有,它就是WURFLManager标记为@service?我添加了一个粘贴链接来显示我在wurfl.xml中的内容。我留下了所有注释,可能是做错了什么。您好,谢谢您的提示,我已经添加了net.sourceforge.wu的组件扫描rfl.spring但仍存在空指针异常。我已更新了wurfl.xml。您是否将wurfl.xml添加到spring web.xml配置中,以便由spring加载?编辑:嗯,我看到您正在导入它。请按照我上面所述更改您的打包扫描。您好,谢谢您的帮助。目前正在cat回家中。将在一个小时后进行测试并恢复看起来Spring找不到您的bean。让我们尝试将wurfl.xml文件内容移动到webapp-config.xml,看看问题是否在于wurfl.xml不是由Spring加载的。使用相同的配置,我会将wurfl管理器连接到任何控制器。这是我试图关注的部分。目前为止没有任何内容。thanksHello@Ryan,我更新了t他在帖子中粘贴了链接,你可以在这里看到,谢谢,这正好证实了我所说的,对吗?SiteMesh是一个创建你的装饰映射器的人。Spring甚至没有出现在图片中。正如我提到的,我不是SiteMesh专家,所以我不知道你对SiteMesh/Spring集成有什么样的选择。我知道的一件事是t将工作是最重要的。
@Controller(value = "useraccesscontroller")
private static Logger logger = Logger.getLogger(UserAccessController.class);

@Autowired
UserAccountService userAccountService;
@Autowired
VerificationService verificationService;
@Autowired
EmailSender emailSender;
@Autowired
EmailTemplateService emailTemplateService;

@Autowired
Map<String, String> facebookAPI;
@Resource
@Qualifier(value = "roleLandingPage")
Map<String, String> roleLandingPage;
@Resource
@Qualifier(value = "usefulUrls")
Map<String, String> usefulUrls;
@Autowired
private WURFLManager wurflManager;


public UserAccessController(){

}


@RequestMapping(value = "/site/authentication/signup/form")
public ModelAndView showAccountRequestForm(HttpServletRequest request){
    net.sourceforge.wurfl.core.Device device = wurflManager.getDeviceForRequest(request);
    SignupForm form = new SignupForm();
    ModelMap map = new ModelMap();
    map.addAttribute("signupForm",form);
    map.addAttribute("message","");

    return new ModelAndView("signup",map);

}
<bean id="wurfl.manager" class="net.sourceforge.wurfl.spring.SpringWurflManager" autowire-candidate="true">
     <property name="wurflModel" ref="wurfl.model" />
</bean>
<context:component-scan base-package="net.sourceforge.wurfl.*"/>