Jsf 如何使用

Jsf 如何使用,jsf,primefaces,navigation,Jsf,Primefaces,Navigation,我试图设置一种方式,当用户选择一行时,另一个页面会被加载。行return Pages.EDIT_项被执行,但没有发生任何事情,没有异常或错误,什么都没有。我甚至可以通过键入URL访问Pages.EDIT_项目,但不知何故,让支持bean打开页面是行不通的 我的数据表: <p:dataTable id="categoriesTable" value="#{category.items}" var="item" selectionMode="single" rowKey="#{item.id}

我试图设置一种方式,当用户选择一行时,另一个页面会被加载。行return Pages.EDIT_项被执行,但没有发生任何事情,没有异常或错误,什么都没有。我甚至可以通过键入URL访问Pages.EDIT_项目,但不知何故,让支持bean打开页面是行不通的

我的数据表:

<p:dataTable id="categoriesTable" value="#{category.items}" var="item" selectionMode="single" rowKey="#{item.id}" >
   <p:commandButton id="toggler" type="button" value="Columns" style="float:right"  />
   <p:ajax event="rowSelect" listener="#{listCategoriesController.onRowDblClick}"  />      
   <p:columnToggler datasource="categoriesTable" trigger="toggler" />
   <p:column headerText="#{msg['addItem.internal_id']}" sortBy="#{item.internalId}" filterBy="#{item.internalId}" filterMatchMode="contains" >                                        
       <h:outputText value="#{item.internalId}" />
   </p:column>
</p:dataTable>
我的后盾豆:

    package de.rcwgmbh.inventory.controller;

import de.rcwgmbh.inventory.data.CategoryProducer;
import de.rcwgmbh.inventory.data.ItemProducer;
import de.rcwgmbh.inventory.model.Category;
import de.rcwgmbh.inventory.model.Item;
import de.rcwgmbh.inventory.services.ItemService;
import java.io.Serializable;
import java.util.List;
import java.util.ResourceBundle;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.EntityManager;
import org.primefaces.event.SelectEvent;
import org.primefaces.event.TabChangeEvent;
import org.primefaces.event.UnselectEvent;

/**
 *
 * @author jalexakis
 */
@ViewScoped
@Named
public class ListCategoriesController implements Serializable {

    private static final long serialVersionUID = -2347239478324L;  

    @Inject
    private EntityManager entityManager;
    @Inject
    private CategoryProducer categoryProducer;
    @Inject
    private ItemService itemService;
    @Inject
    private ItemProducer itemProducer;



     public List<Item> doListItems(Category category) {
        final List<Item> items = itemService.getItemsList(category);
        category.setItems(items);
        categoryProducer.setSelectedCategory(category);
        return items;
    }

    public String doAddCategory() {
        categoryProducer.prepareAddCategory();
        return Pages.LIST_CATEGORIES;
    }

    public String doEditCategory(Category category) {
        categoryProducer.prepareEditCategory(category);
        return Pages.LIST_CATEGORIES;
    }

    public String doEditItem(){
        itemProducer.prepareEditItem(itemProducer.getSelectedItem());
        return Pages.EDIT_ITEM;
    }


    public void onTabChange(TabChangeEvent event) {
        String categoryName = event.getTab().getTitle();
        Category category = entityManager.find(Category.class, categoryName);
        categoryProducer.setSelectedCategory(category);
        ResourceBundle bundle = ResourceBundle.getBundle("messages", FacesContext.getCurrentInstance().getViewRoot().getLocale());
        String value = bundle.getString("listCategories.category_selected");
        FacesMessage msg = new FacesMessage(value, event.getTab().getTitle());
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }       


    public void onRowDblClick(SelectEvent event){
        itemProducer.setSelectedItem((Item)event.getObject());
        doEditItem();
    }

}

在此代码中不执行重定向。 Ajax侦听器调用与CommandButtons的操作不同,如果返回字符串,则不会发生任何事情。
如果要重定向到另一个页面,可以在ajax调用中这样做:FacesContext.getCurrentInstance.getExternalContext.redirectotherpage.xhtml

在此代码中不执行重定向。 Ajax侦听器调用与CommandButtons的操作不同,如果返回字符串,则不会发生任何事情。
如果要重定向到另一个页面,可以在ajax调用中这样做:FacesContext.getCurrentInstance.getExternalContext.redirectotherpage.xhtml

这里是另一种方法,它通过JSF导航处理API实现,允许您应用显式导航或通过您认为合适的导航规则。为了方便起见,在中找到并引用了此代码

    ConfigurableNavigationHandler configurableNavigationHandler =
    (ConfigurableNavigationHandler) FacesContext.getCurrentInstance()
        .getApplication().getNavigationHandler();

    configurableNavigationHandler.performNavigation("otherpage?faces-redirect=true);

下面是另一种方法,它通过JSF导航处理API实现,允许您应用显式导航或通过您认为合适的导航规则。为了方便起见,在中找到并引用了此代码

    ConfigurableNavigationHandler configurableNavigationHandler =
    (ConfigurableNavigationHandler) FacesContext.getCurrentInstance()
        .getApplication().getNavigationHandler();

    configurableNavigationHandler.performNavigation("otherpage?faces-redirect=true);

谢谢你的解释,谢谢你的解释。