У меня возникла проблема с DI весной. Мое приложение объединяет PrimeFaces & Spring и использует Spring для DI и создания управляемых компонентов.@ Важная аннотация и NullPointerException
У меня есть <p:datatable>
, и когда пользователь выбирает строку и кнопку push, мое приложение открывает динамическое диалоговое окно с другой сеткой, чтобы отобразить выбранную строку. Я хочу иметь две отдельные обработанные бобы для каждой сетки.
Моя страница .jsf очень просто - просто <p:datatable>
и ленивым загружен <p:dialog>
:
<?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>
Первый боб:
@Component("parametrySystemoweGridBean")
@Scope("request")
public class ParametrySystemoweGridBean {
private DefinicjeParametrow definicjaParametruSelected;
public ParametrySystemoweGridBean() {
}
//Some other stuff - getters, setters etc.
}
Второй боб - вот проблема:
@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.
Единственное, что я хочу, это сохранить ссылку на DefinicjeParametrow instan из другого компонента (это мой выбранный ряд). Я попытался изменить область бобов, но это не сработало. Вторая вещь, которую я пробовал, заключалась в том, чтобы автоувеличивать весь WartosciParametruGridBean, используя @Autowired
, но это также не удалось.
Когда отображается диалоговое окно, я следующее исключение:
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.
Вы УДИВИТЕЛЬНЫ! Он работает отлично, и это так просто! Если вы когда-нибудь в Польше просто позвоните мне - я должен купить вам бутылку нашей лучшей польской водки;) –