我使用的是JSF、Hibernate和;mySQL。简化了这样的概念和代码。我有一个实体类
@Entity
public class CountryReview{
public CountryReview(){}
@Id
@GeneratedValue
private int pageId;
private String countryName;
private String capital;
// setter and getters
}
一种支持豆类
@ManagedBean
@SessionScoped
public class UserBean{
private List<CountryReview> review;
// setters & getters for review
privater HibernateUtil helper;
private Session session;
@PostConstruct
private void populateBean(){
session = helper.getSessionFactory().openSession();
session.beginTransaction();
review = session.createQuery("from CountryReview").list();
session.getTransaction().commit();
}
}
我想使用"review"对象来填充dataTable,并希望基于dataTable的列单元格的数据导航到另一个页面。预期的代码类似于此
.
.
.
<h:body>
<h:form>
<h:dataTable value="#{userBean.review}" var="name">
<h:column>
#{name.capital}
</h:column>
<h:column>
#{name.countryName}
</h:column>
<h:column>
<h:commandButton value="Know More" action="#{name.countryName}"/>
</h:column>
</h:dataTable>
</h:form>
</h:body>
有办法做到这一点吗??
<h:column>
<h:commandButton value="Know More" action="#{name.countryName}"/>
</h:column>
action="#{name.countryName}"
是错误的,因为它是实体类的getter方法。
commandButton或commandLink的操作应该是返回导航规则结果的方法(通常在控制器类中(。
命令按钮的操作方法示例:
public String goToCountry(String selectedCountryId ){
// do what ever you want
return NaviRule-Outcome which is usually defined in navigations.xml
// OR something like this:
return yourTargetOutcome+"?faces-redirect=true&pageId="+selectedCountryId;
}
然后在JSF页面中使用它,如下所示:
<h:form>
<h:dataTable value="#{userBean.review}" var="review">
<h:column>
#{review.capital}
</h:column>
<h:column>
#{review.countryName}
</h:column>
<h:column>
<h:commandButton value="Know More" action="#{usearBean.goToCountry(review.pageId)}"/>
</h:column>
</h:dataTable>
</h:form>
或更好使用:
<h:outputLink value="countryReview.xhtml?pageId=#{review.pageId}"/>
在这种情况下,您不需要用于导航的操作方法,而是将pageId作为requestParameter tio发送到目标视图,该视图处理所选对象