Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.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
Java spring与vaadin积分_Java_Spring_Servlets_Vaadin - Fatal编程技术网

Java spring与vaadin积分

Java spring与vaadin积分,java,spring,servlets,vaadin,Java,Spring,Servlets,Vaadin,我试图用几个uis-vaadin、jsp等实现一个应用程序 它使用的是简单的jsp,但后来我决定使用vaadin作为ui 我已经创建了vaadinservlet(剩下的还有springservlet)。 我的web.xml如下所示 <?xml version="1.0"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance

我试图用几个
ui
s-vaadin、jsp等实现一个应用程序

它使用的是简单的
jsp
,但后来我决定使用vaadin作为ui

我已经创建了vaadinservlet(剩下的还有springservlet)。 我的
web.xml
如下所示

<?xml version="1.0"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:/pmc-web-context.xml
        </param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>another-pmc-servlet</servlet-name>
        <servlet-class>com.vaadin.server.VaadinServlet</servlet-class>
        <init-param>
            <param-name>UI</param-name>
            <param-value>com.xxxx.app.pmc.vaadin.PmcUi</param-value>
        </init-param>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value></param-value>
        </init-param>
    </servlet>

    <servlet>
        <servlet-name>pmc-servlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value></param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>another-pmc-servlet</servlet-name>
        <url-pattern>/VAADIN/*</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>pmc-servlet</servlet-name>
        <url-pattern>/JSP/*</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>/WEB-INF/jsp/*</url-pattern>
    </servlet-mapping>

</web-app>
ProjectService
也是一个springbean

@Service("projectService")
public class ProjectService {

    @Autowired
    private ProjectRepository projectRepository;

    public void insertProject(Project project) {
        projectRepository.store(project);
    }

    public List<Project> findAllProjects() {
        return projectRepository.getAllItems();
    }

    public Project getProject(String id) {
        return projectRepository.get(id);
    }

}
当我使用spring
controller
(使用JSP)编写应用程序时,它运行良好。 但当我添加vaadin-
JSP
时,vaadin应用程序停止工作,并为
ProjectService
抛出
NullPointerException
ProjectRepository
。。。我用的所有豆子

有什么问题吗? 我所有的上下文
xml
上下文文件都很简单

<import resource="classpath:com/xxxx/app/pmc/pmc-service-context.xml"/>
<context:component-scan base-package="com.xxx.app.pmc"/>
JSP工作得很好,所以我认为问题不在于spring声明本身,而在于spring与我的vaadin的集成

如何解决它? 例如,当我手动创建
ProjectTable
对象时,它为
ProjectService
抛出
NullPointerException
。当我手动创建
ProjectService
时,它会为
ProjectRepository
抛出
NullPointerException
,以此类推。自动布线似乎根本不起作用

还有,忘了添加我的用户界面代码

package com.xxxx.app.pmc.vaadin;

import com.xxxx.app.pmc.vaadin.components.ProjectTable;
import com.vaadin.annotations.Title;
import com.vaadin.server.VaadinRequest;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;

import org.springframework.stereotype.Component;

@Title("PMC")
@Component("pmcVaadin")
public class PmcUi extends UI {

    @Override
    protected void init(VaadinRequest request) {
        VerticalLayout mainLayout = new VerticalLayout();
        ProjectTable projectTable = new ProjectTable();
        mainLayout.addComponent(projectTable.createTable());
        mainLayout.setSizeFull();
        setContent(mainLayout);
    }

}

正如您所怀疑的,您的Springbean是在应用程序和Spring的servlet上下文中创建的。您的Vaadin servlet无法访问其中任何一个

对于包含代码的详细(手动)解决方案,请检查或搜索适合您的解决方案(我个人建议SpringVaadin集成)


典型的想法是以编程方式将vaadinservlet传递给Spring的一个实用程序类(例如:webapplicationcontexttils)并检索应用程序上下文(由ContextLoaderListener加载)。如果您需要servlet上下文,那么从我看到的代码示例来看,您可以执行与上面相同的操作,但是还可以手动读取上下文(例如:使用XmlWebApplicationContext)并将应用程序上下文设置为其父上下文。

非常简单的选择是使用可配置支持。它将实现一些方面的魔力,所有由
@Configurable
注释的java对象将自动集成到Spring中。您可以在中找到更多详细信息。另外请注意,要在GUI中表示上下文信息,您必须使用会话bean。这导致了会话大小的问题,并且在更大的应用程序中,不可能进行集群

<import resource="classpath:com/xxxx/app/pmc/pmc-service-context.xml"/>
<context:component-scan base-package="com.xxx.app.pmc"/>
<mvc:annotation-driven/>
<context:annotation-config/>
package com.xxxx.app.pmc.vaadin;

import com.xxxx.app.pmc.vaadin.components.ProjectTable;
import com.vaadin.annotations.Title;
import com.vaadin.server.VaadinRequest;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;

import org.springframework.stereotype.Component;

@Title("PMC")
@Component("pmcVaadin")
public class PmcUi extends UI {

    @Override
    protected void init(VaadinRequest request) {
        VerticalLayout mainLayout = new VerticalLayout();
        ProjectTable projectTable = new ProjectTable();
        mainLayout.addComponent(projectTable.createTable());
        mainLayout.setSizeFull();
        setContent(mainLayout);
    }

}