【发布时间】:2013-12-29 20:09:36
【问题描述】:
我有一个项目的 mySql 表,我在 index.xhtml 中显示为一个列表。 projectid 列包含超链接。单击它们时,我希望将选择的特定 projectid 行作为查询参数传递到另一个 jsf 文件 (ListProjects.xhtml) 中,该文件显示引用 index.xhtml 中选择的 projectid 的所有项目值。 index.xhtml 页面似乎正确传递了值(将鼠标悬停在选择上时,url 显示正确的 id 值)。当实际单击选择时,我在生成的 ListPprojects.xhtml 中得到一个空白页面:
我不确定它是否是我在 index.xhtml 上选择的标签,应该将其替换为另一个标签,例如映射到 bean 操作的 CommandLink。
或者,结果页面 (ListProject.xhtml) 中的标记是否是用于检索 projectid 值作为查询参数的正确标记?
另外,如果projectid是一个int,应该先用parseInt还是其他方法把它转成String?
问题是否存在于其中 projectid 导致结果页面呈现空白记录的空值的会话 bean 中?任何意见是极大的赞赏。提前致谢!
实体bean(projects.java)中的命名查询是:
@NamedQuery(name = "Projects.findByProjectid", query = "SELECT p FROM Projects p WHERE p.projectid = :projectid")
在 index.xhtml 中,我使用以下标签来显示超链接:
<h:link value="#{item.projectid}" outcome="ListProject">
<f:param name="projectid" value="#{item.projectid}"/>
</h:link>
ListProjects.xhtml 是我希望根据在 index.xhtml 中选择的 projectid 显示项目详细信息的页面(这就是我开始感到困惑的地方):
<h:column>
<f:facet name="header">
<h:outputText value="Countryid"/>
</f:facet>
<h:commandLink action="#{selProjectMgtBean.selProjectList}" value="#{item.projectid}"/>
</h:column>
我的会话 bean:
@Stateless
public class ProjectSelectedBean implements ProjectSelectedBeanLocal {
@PersistenceContext(unitName = "QueryTrialNoMavenPU")
private EntityManager em;
@Override
public List<Projects> getSelectedProjects(String projectid) {
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
projectid=request.getParameter(projectid);
return em.createNamedQuery("Projects.findByProjectid", Projects.class).setParameter ("projectid", projectid).getResultList();
}
}
最后调用渲染选择的方法:
package com.manaar.beans;
imports....
@Named(value = "selProjectMgtBean")
@RequestScoped
public class SelProjectMgtBean {
@ManagedProperty(value="#{item.projectid}")
private String projectid;
private List<Projects> selProjectList;
@EJB
private ProjectSelectedBeanLocal projectSelectedBeanLocal;
@PostConstruct
public void init() {
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance ().getExternalContext().getRequest();
projectid=request.getParameter("projectid");
selProjectList = projectSelectedBeanLocal.getSelectedProjects();
}
public List<Projects> getSelProjectList() {
return selProjectList;
}
public void setSelProjectList(List<Projects> selProjectList) {
this.selProjectList = selProjectList;
}
}
【问题讨论】:
标签: java jsf-2 primefaces jpa-2.0 glassfish-3