Я пытаюсь использовать аннотацию ManagedProperty
для Injection Dependency для другого ManagedBean, но я всегда получаю NullPointerException
. Я попытаюсь описать, как работает мое приложение.@ManagedProperty остается null
Это PDF-генератор. Во-первых, у меня есть страница xhtml
, у которой есть вкладка. На каждой вкладке я использую тег <ui:include>
. Все эти бобы имеют ViewScope.
В первой вкладке у меня есть заголовок inputText
и описание textArea
полей, и это странно, что эти поля работают хорошо, даже если я не использую DI.
Проблема возникает при переходе на другую вкладку, и я хочу добавить дополнительную информацию/текст.
Мое приложение работает так: я пишу текст в поле inputText(), то я нажимаю «Готово» кнопку(), который проходит this
объект на завод, то я нажимаю «Print» () кнопка для создания файла .pdf. На этом рисунке вы можете увидеть PanelInneBean
и ContainerBean
областей.
Позвольте мне показать мой источник:
@ManagedBean(name="inne")
@ViewScoped
public class PanelInneBean extends AbstractPanel implements Serializable {
private static final long serialVersionUID = 1L;
private final int CODE = 4;
private boolean use;
private String tytul, opis;
private PdfFactory pdf;
@PostConstruct
private void init() {
pdf = PdfFactory.getPdfObject();
use = false;
}
public PanelInneBean() {
}
public boolean getUse() {
return use;
}
public String getTytul() {
return tytul;
}
public void setTytul(String tytul) {
this.tytul = tytul;
}
public String getOpis() {
return opis;
}
public void setOpis(String opis) {
this.opis = opis;
}
public int getCode() {
return CODE;
}
private void add() {
use = true;
}
public void addBean() {
add();
pdf.addElement(this);
System.out.println("InnePanel after pdf.addElement() this.opis:" + this.opis);
}
}
завод источник:
@ManagedBean(name="factory")
@SessionScoped
public class PdfFactory implements Serializable {
//.............
private InneP inn = new InneP() //without new does not work too;
//.............
public int addElement(PdfElement element) {
pdfType = true;
if (element.getUse()) {
elementList.add(element);
return 1;
}
return 0;
}
//.............
public List<Element> getDocumentBody() throws DocumentException {
initSignature();
List<Element> list = new ArrayList<Element>();
list.add(createDocDate());
list.add(Chunk.NEWLINE);
for (PdfElement p : elementList) {
if (p.getUse()) {
switch (p.getCode()) {
//............
case 4:
list.addAll(inn.generatePharse());
break;
}
}
}
list.addAll(sF.generatePharse());
return list;
}
последний InneP источник (этот класс генерировать Paragraps для печати) в этом классе я получаю NPE:
@ManagedBean
@RequestScoped
public class InneP {
private List<Element> list = new ArrayList<Element>();
private Font font;
@ManagedProperty("#{inne}")
private PanelInneBean panelInneBean;
public InneP(){}
public InneP(Font font) {
this.font = font;
}
public void setPanelInneBean(PanelInneBean inne) {
this.panelInneBean = inne;
}
public List<Element> generatePharse() {
if (panelInneBean.getTytul().length() > 0) {
System.out.println("drukowanie tytulu");
list.add(createTitle(panelInneBean.getTytul()));
list.add(Chunk.NEWLINE);
}
if (panelInneBean.getOpis().length() > 0) {
list.add(createDescription(panelInneBean.getOpis()));
list.add(Chunk.NEWLINE);
}
return list;
}
private Paragraph createTitle(String tytul) {
System.out.println("inne tytul: " + tytul);
font.setStyle(Font.NORMAL);
Paragraph t = new Paragraph(tytul, font);
t.setAlignment(Element.ALIGN_LEFT);
return t;
}
private Paragraph createDescription(String opis) {
System.out.println("inne opis:" + opis);
font.setStyle(Font.BOLD);
Paragraph d = new Paragraph(opis, font);
d.setAlignment(Element.ALIGN_LEFT);
return d;
}
}
Кнопка печати только добавляет список к for
циклу и печати всех пунктам; Я использую iText lib и OpenFaces для создания вкладки.
Надеюсь, что я написал достаточно информации.
В 'private InneP inn' у вас есть' частный InneP inn'. Где вы инициализируете это поле? В классе 'InneP' у вас нет аннотации' @ ManagedBean', так что это не управляемый bean-компонент, поэтому вы создаете его вручную с помощью 'new'? – partlov
Я забыл добавлять аннотации к InneP ManagedBean, добавленному и до сих пор получающему NPE.Нет, я не использую слово 'new'; – insict
http://stackoverflow.com/questions/6244965/sessionscoped-does-not-work-when-adding-named? – MarianP