您好我是hibernate,PrimeFaces,JSF和Spring的新手。我正在尝试制作一个有效的代码。
我有Empresa.java,EmpresaDAOImpl
,EmpresaServiceImpl
,EmpresaBean
。这段代码在屏幕上显示了每行中带有radiobutton的数据表并且它可以工作。现在我已经实现了新的类LDiario.java,LDiarioDAOImpl
,LDiarioServiceImpl
和LDIarioBean
。 Empresa
和Ldiario
已经建立了关系oneToMany。但是当我按下Empresa
列表中的按钮进入其他页面并向我显示其他数据表Ldiario
时,我不知道如何制作。对不起我在学英语。非常感谢你。
错误
Grave: Error Rendering View[/pages/menu/menuPrincipal.xhtml]
javax.el.ELException: /pages/menu/menuPrincipal.xhtml @17,70 value="#{ldiarioBean.getLDiarioList()}": java.lang.NullPointerException
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
Empresa.java
@Entity
@Table(name = "empresas")
public class Empresa implements Serializable{
@Id
@Column(name = "CLAVE")
@GeneratedValue private Integer CLAVE;
@OneToMany
@JoinColumn(name = "empresa")
private List<LDiario> ldiarios;
LDiario.java
@Entity
@Table(name = "LDIARIO2014")
public class LDiario implements Serializable{
@Id
@Column(name = "CLAVE")
@GeneratedValue private Integer CLAVE;
@ManyToOne
@JoinColumn (name = "empresa")
private Empresa empresa;
EmpresaBean.java
@ManagedBean(name="empresaBean")
@ViewScoped
@Component
public class EmpresaBean {
@Autowired
private EmpresaService empresaService;
private Empresa empresa;
private Empresa selectedEmpresa;
public EmpresaService getEmpresaService() {
return empresaService;
}
public Empresa getSelectedEmpresa() {
return selectedEmpresa;
}
public void setSelectedEmpresa(Empresa selectedEmpresa) {
this.selectedEmpresa = selectedEmpresa;
}
public void setEmpresaService(EmpresaService empresaService) {
this.empresaService = empresaService;
}
public EmpresaBean(){
}
public List<Empresa> getEmpresaList(){
return empresaService.getAll();
}
public Empresa getEmpresa() {
return empresa;
}
public void setEmpresa(Empresa empresa) {
this.empresa = empresa;
}
public String View() {
return "/pages/menu/menuPrincipal?faces-redirect=true";
}
}
LDiarioBean.java
@ManagedBean(name="ldiarioBean")
@ViewScoped
@Component
public class LDiarioBean {
private LDiario ldiario;
@Autowired
private LDiarioService ldiarioservice;
private LDiario selectedLdiario;
public LDiarioService getLdiarioservice() {
return ldiarioservice;
}
public void setLDiarioservice(LDiarioService ldiarioservice) {
this.ldiarioservice = ldiarioservice;
}
public LDiarioBean(){
}
public LDiario getLdiario() {
return ldiario;
}
public void setLdiario(LDiario ldiario) {
this.ldiario = ldiario;
}
public LDiario getSelectedLdiario() {
return selectedLdiario;
}
public void setSelectedLdiario(LDiario selectedLdiario) {
this.selectedLdiario = selectedLdiario;
}
public List<LDiario> getLDiarioList(){
return ldiarioservice.getAll();
}
public LDiario getLDiario() {
return ldiario;
}
public void setLDiario(LDiario ldiario) {
this.ldiario = ldiario;
}
}
EmpresaServiceImpl.java
@Service
@Repository
public class EmpresaServiceImpl implements EmpresaService {
@Autowired
private EmpresaDao empresaDao;
@Override
public List<Empresa> getAll() {
return empresaDao.findAll();
}
}
LDiarioServiceImpl.java
@Service
@Repository
public class LDiarioServiceImpl implements LDiarioService {
@Autowired
private LDiarioDao ldiarioDao;
@Override
public List<LDiario> getAll() {
return ldiarioDao.findAll();
}
EmpresaDAOImpl.java
@Transactional
@Repository
public class EmpresaDaoImpl implements EmpresaDao{
@Autowired
private SessionFactory sessionFactory;
@Override
public List<Empresa> findAll() {
return sessionFactory.getCurrentSession().createQuery("from Empresa").list();
}
}
LDiarioDAOImpl.java
@Transactional
@Repository
public class LDiarioDaoImpl implements LDiarioDao{
@Autowired
private SessionFactory sessionFactory;
@Override
public List<LDiario> findAll() {
return sessionFactory.getCurrentSession().createQuery("from LDiario").list();
}
}
的index.xhtml
<h:head>
<title>Lista con Java Server Faces</title>
</h:head>
<h:body>
<h:form id="form">
<p:dataTable id="radioDT" var="emp" value="#{empresaBean.getEmpresaList()}"
selection="#{empresaBean.selectedEmpresa}" rowKey="#{emp.CLAVE}">
<f:facet name="header">
Lista de Empresas
</f:facet>
<p:column selectionMode="single" style="width:16px;text-align:center"/>
<p:column headerText="Id">
<h:outputText value="#{emp.CLAVE}" />
</p:column>
<p:column headerText="Nombre Empresa">
<h:outputText value="#{emp.NOMBRE}" />
</p:column>
<p:column headerText="AÑO">
<h:outputText value="#{emp.EJERCICIO}" />
</p:column>
<!-- "#{empresaBean.selectedEmpresa}" -->
<f:facet name="footer">
<p:commandButton action="#{empresaBean.View}" value="Seleccionar" title="Ir Menu" rowKey="#{emp.CLAVE}" >
<f:setPropertyActionListener target="#{empresaBean.empresa}" value="#{empresaBean.selectedEmpresa}" />
</p:commandButton>
menuPrincipal.xhtml (此页面中的错误)
<h:form>
<!-- <h:outputText value="#{empresaBean.empresa}" /> -->
<h:outputText value="#{empresaBean.selectedEmpresa}" />
<p:dataTable var="ld" value="#{ldiarioBean.getLDiarioList()}">
<!-- selection="#{ldiarioBean.selectedLdiario}" rowKey="#{ld.CLAVE}" -->
<f:facet name="header">
Listado Diario
</f:facet>
<p:column selectionMode="single" style="width:16px;text-align:center"/>
<p:column headerText="ASIENTO">
<h:outputText value="#{ld.ASIENTO}" />
</p:column>
<p:column headerText="FECHA">
<h:outputText value="#{ld.FECHA}" />
</p:column>
<p:column headerText="SUBCUENTA">
<h:outputText value="#{ld.SUBCUENTA}" />
</p:column>
<p:column headerText="CONCEPTO">
<h:outputText value="#{ld.CONCEPTO}" />
</p:column>
<p:column headerText="DEBE">
<h:outputText value="#{ld.DEBE}" />
</p:column>
<p:column headerText="HABER">
<h:outputText value="#{ld.HABER}" />
</p:column>
</p:dataTable>
我认为错误发生在
中的LDiarioDAO.java中@Override
public List<LDiario> findAll() {
return sessionFactory.getCurrentSession().createQuery("from LDiario").list();
}
但我不知道解决方案。你能帮我吗?我在这个页面上寻找 https://gerrydevstory.com/2013/07/02/hibernate-one-to-many-relationship/