如何基于" h:dataTable"导航另一个JSF页面;数据?

时间:2015-08-06 21:19:57

标签: jsf master-detail

我正在使用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>

有没有办法做到这一点?

1 个答案:

答案 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发送到目标视图,该视图处理所选对象