我正在尝试使用以下示例学习JSF,EJB和eclipselink,JPA:
index.xhtml页面显示员工实体的员工列表:
实体:
@Entity
@Table(name="EMPLOYEE")
@NamedQuery(name="Employee.findAll", query="SELECT s FROM Employee s")
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private String empcode;
private String empdesc;
SessionBean函数:
public List<Employee> getEmployeeFindAll() {
return em.createNamedQuery("Employee.findAll").getResultList();
}
index.xhtm:
<body>
<h:form>
<h:dataTable border="1" var="temp" id="d1"
value="#{EmployeeManagedBean.EmployeeFindAll}">
<f:facet name="header">
<h:outputText id="o1" value="EmpTable"></h:outputText>
</f:facet>
<h:column id="c1">
<f:facet name="header">
<h:outputText id="o2" value="#{temp.empcode}"></h:outputText>
</f:facet>
</h:column>
<h:column id="c2">
<f:facet name="header">
<h:outputText id="o3" value=""#{temp.empdesc}""> /h:outputText>
</f:facet>
</h:column>
</h:dataTable>
</h:form>
到目前为止,index.xhtml
工作正常。现在我有了第二个实体EmployeeQualification
:
@Entity
@Table(name="EMPQUA")
@NamedQuery(name="Empqua.findAll", query="SELECT n FROM Empqua n")
public class Empqua implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
private EmpquaPK id;
@Temporal(TemporalType.DATE)
private Date since;
其中@EmbeddedId
是:
@Embeddable
public class EmpquaPK implements Serializable {
//default serial version id, required for serializable classes.
private static final long serialVersionUID = 1L;
@Column(name="EMPCODE", length = 8)
private String empcode;
@Column(name="QUACODE")
private String quacode;
我想要做的是使用index.xhtml
数据表内容作为第二页的链接,例如empqua.xhtml
,其中我将显示一个数据表,其中包含所选Empcode的所有Empqua记录。
所以我认为我需要的是EmpquaManagedbean
中的一个函数,它将empcode
作为输入,在我的EmpquaSessionbean中调用相应的函数并返回一个Empqua对象列表,其中包含Empqua的所有记录对于给定的empcode:
EmpquaManagedbean:
public List<Empqua> getEmpquaforSelectedEmpcode(String empcode){
return getSessionFacade().getEmpquaByEmpcode(empcode);
}
Empqua Session Bean:
public List<Empqua> getEmpquaByEmpcode(String empcode){
return em.createQuery("SELECT a FROM Empqua a where (a.id.empcode) = :empcode").setParameter("empcode", empcode).getResultList();
}
现在我的问题开始了。我需要将参数empcode
从我的index.xhtml
数据表(当单击链接时)传递给托管bean并返回页面empqua.xhtml
。第一个问题是,如何传递参数?
<h:commandLink value="#{temp.empcode}" action="#{EmpQuaManagedBean.getEmpquaforSelectedEmpcode(temp.empcode)}"></h:commandLink>
返回未找到方法的异常。此外,我可能需要通过另一个函数来调用它,它将返回String empqua.xhtml
以移动到下一页。