Java @价值诠释&;空指针异常

Java @价值诠释&;空指针异常,java,spring,jsf,primefaces,annotations,Java,Spring,Jsf,Primefaces,Annotations,我在春天面临DI的问题。我的应用程序集成了PrimeFaces和Spring,并使用Spring进行DI和创建托管bean 我有一个,当用户选择一行并按下按钮时,我的应用程序将打开一个与另一个网格的动态对话框,以显示所选行。我希望每个网格有两个单独的豆子 My.jsf页面非常简单-只是一个和延迟加载的: <?xml version="1.0" encoding="UTF-8"?> <html xmlns="http://www.w3.org/1999/xhtml" xmlns

我在春天面临DI的问题。我的应用程序集成了PrimeFaces和Spring,并使用Spring进行DI和创建托管bean

我有一个
,当用户选择一行并按下按钮时,我的应用程序将打开一个与另一个网格的动态对话框,以显示所选行。我希望每个网格有两个单独的豆子

My.jsf页面非常简单-只是一个
和延迟加载的

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" 
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">

<h:body>

    <ui:composition template="../templates/layout.xhtml">

    <ui:define name="title">
            PrimeFaces webPage
    </ui:define>

    <ui:define name="content">

        <h:form style="height:90%;">
                <p:dataTable value="#{parametrySystemoweGridBean.definicjeParametrowModel}" var="definicjeParametrow" id="definicjeParametrowGrid"
                    rowKey="#{definicjeParametrow.id}" paginator="true" rows="10"  filteredValue="#{parametrySystemoweGridBean.filteredDefinicjeParametrowList}"
                    selection="#{parametrySystemoweGridBean.definicjaParametruSelected}" rowsPerPageTemplate="5, 10, 15, 20"
                    selectionMode="single" scrollHeight="100%" scrollable="true">

                    <!-- Columns -->

                    <f:facet name="footer">
                        <p:commandButton value="Wartości parametru" onclick="PF('wartosciDialog').show();">
                        </p:commandButton>

                        <p:commandButton value="Odśwież" actionListener="#{parametrySystemoweGridBean.refresh}" update="definicjeParametrowGrid">
                        </p:commandButton>
                    </f:facet>

                </p:dataTable>
            </h:form>

            <p:dialog widgetVar="wartosciDialog" header="Wartości parametru #{parametrySystemoweGridBean.definicjaParametruSelected.id}"
                appendTo="@(body)" dynamic="true">
                <h:form style="height:90%;">
                    <p:dataTable id="wartosciGrid" var="wartoscParametru" selectionMode="single" scrollHeight="100%" scrollable="true"
                        value="#{wartosciParametruGridBean.wartosciParametrowModel}" rendered="true">

                        <!-- Columns -->

                    </p:dataTable>
                </h:form>
            </p:dialog>

    </ui:define>

    </ui:composition>


</h:body>

</html>
第二个bean-问题是:

@Component("wartosciParametruGridBean")
@Scope("request")
public class WartosciParametruGridBean {

    private final Logger log = Logger.getLogger(WartosciParametruGridBean.class);

    private WartosciParametrowModel wartosciParametrowModel;

    private WartosciParametrow selected;

    @Value("#{parametrySystemoweGridBean.definicjaParametruSelected}")
    private DefinicjeParametrow definicjeParametrow;

    public WartosciParametruGridBean() {
        this.log.info(this.definicjeParametrow.getKod());
    }

    //Some other stuff - getters, setters etc.
我唯一想做的就是从另一个bean(这是我选择的行)保留对DefinicjeParametrow实例的引用。我试图改变我的bean范围,但没有成功。我尝试的第二件事是使用
@Autowired
自动连接整个WartoScipareTruGridBean,但也失败了

显示对话框时,我有以下异常:

SEVERE: Error Rendering View[/pages/parametry.xhtml]
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'wartosciParametruGridBean' defined in file [...]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [pl.sygnity.cbop.admin.web.beans.WartosciParametruGridBean]: Constructor threw exception; nested exception is java.lang.NullPointerException
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1007)
...

拜托,你能帮我一下吗?我真的被卡住了,在春天是个新手。我使用的是最新的Primefaces 4.0、JSF Mojarra 2.2.4和Spring 3.2.5.RELEASE。

在Spring向其注入任何值之前,需要构造对象

所以在这一步

public WartosciParametruGridBean() {
    this.log.info(this.definicjeParametrow.getKod());
}
字段
definicjeParametrow
仍为
null
。您始终可以将ParameterySystemoWeGridBean直接自动连接到构造函数中

@Autowired
public WartosciParametruGridBean(ParametrySystemoweGridBean parametrySystemoweGridBean) {
    this.log.info(this.parametrySystemoweGridBean.getDefinicjeParametrow().getKod());
}

我不知道JSF与Spring的集成(反之亦然),所以我不能保证解决方案的正确性,但根本原因是上面解释的

你真棒!它工作完美,而且非常简单!如果你想去波兰,就打电话给我——我得给你买瓶我们最好的波兰伏特加;)
@Autowired
public WartosciParametruGridBean(ParametrySystemoweGridBean parametrySystemoweGridBean) {
    this.log.info(this.parametrySystemoweGridBean.getDefinicjeParametrow().getKod());
}