链接不同JSF页面中的实体

时间:2017-08-29 10:00:29

标签: jsf jpa jsf-2 eclipselink

我正在尝试使用以下示例学习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以移动到下一页。

0 个答案:

没有答案