我正在使用JSF,Hibernate& MySQL的。像这样的简化概念和代码。 我有一个实体类
@Entity
public class CountryReview{
public CountryReview(){}
@Id
@GeneratedValue
private int pageId;
private String countryName;
private String capital;
// setter and getters
}
支持bean类
@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();
}
}
我想使用&#34;评论&#34;对象填充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>
有没有办法做到这一点?
答案 0 :(得分:0)
<h:column>
<h:commandButton value="Know More" action="#{name.countryName}"/>
</h:column>
action="#{name.countryName}"
是错误的,因为它是实体类的getter方法。
和commandButton或commandLink的操作应该是一个返回导航规则结果的方法(通常在控制器类中)。
commandButton的动作方法示例:
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发送到目标视图,该视图处理所选对象