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



我使用的是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发送到目标视图,该视图处理所选对象

相关内容

最新更新