Java 当用户单击一行时,如何导航到其他页面?

Java 当用户单击一行时,如何导航到其他页面?,java,jsf-2,richfaces,Java,Jsf 2,Richfaces,我希望在用户单击行时能够导航到其他页面。 问题 没有抛出任何错误。我可以看到selectionListener以预期的行值执行,但什么也没有发生 这是正确的方法吗?即使用我的动作监听器来实现这一目的 就是这个。 支持bean package com.howto; import java.util.ArrayList; import java.util.Collection; import java.util.List; import javax.annotation.PostConstr

我希望在用户单击行时能够导航到其他页面。
问题

  • 没有抛出任何错误。我可以看到
    selectionListener
    以预期的行值执行,但什么也没有发生
  • 这是正确的方法吗?即使用我的动作监听器来实现这一目的
就是这个。
支持bean

package com.howto;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.AjaxBehaviorEvent;
import javax.faces.model.DataModel;

import org.richfaces.component.UIExtendedDataTable;

@ManagedBean(name = "backingBean")
@SessionScoped
public class BackingBean {
    private List<String> names;
    private DataModel<String> name;
    private String rowValue;
   // private List<String> selection;
    private Collection<String> selection;

    @PostConstruct
    public void init() {
        names = new ArrayList<String>();
        names.add("MyName");
        names.add("YourName");
        names.add("OurName");
        names.add("MamaDidNotGiveOne");
    }

    public void update() {
        System.out.println("Somebody clicked "
                + name);
    }

    public List<String> getNames() {
        return names;
    }

    public void setNames(List<String> names) {
        this.names = names;
    }

    public DataModel<String> getName() {
        return name;
    }

    public void setName(DataModel<String> name) {
        this.name = name;
    }

    public String selectionListener(AjaxBehaviorEvent event) {
        UIExtendedDataTable dataTable = (UIExtendedDataTable) event.getComponent();
        Object originalKey = dataTable.getRowKey();
      //  selectionItems.clear();
        for (Object selectionKey : selection) {
            dataTable.setRowKey(selectionKey);
            if (dataTable.isRowAvailable()) {
                //selectionItems.add((InventoryItem) dataTable.getRowData());
                rowValue =  (String) dataTable.getRowData();
            }
        }        
        dataTable.setRowKey(originalKey);
        return "success";
    }

    public String gotopage() {
        return "success";
    }

    public Collection<String> getSelection() {
        return selection;
    }

    public void setSelection(Collection<String> selection) {
        this.selection = selection;
    }

    public String getRowValue() {
        return rowValue;
    }

    public void setRowValue(String rowValue) {
        this.rowValue = rowValue;
    }

}
导航规则

<navigation-rule>
        <from-view-id>*</from-view-id>
         <navigation-case>
            <from-action>#{backingBean.selectionListener}</from-action>
            <from-outcome>success</from-outcome>
            <to-view-id>/pages/dummyfolder/results.xhtml</to-view-id>
        </navigation-case>
</navigation-rule>

*
#{backingBean.selectionListener}
成功
/pages/dummyfolder/results.xhtml


使用Richfaces 4无法找到版本为的标记。

您无法通过从操作侦听器方法返回
字符串来导航。您只能在实际操作方法中执行此操作。您需要将方法返回类型设置回
void
,并在的帮助下自行导航


无法通过从actionlistener方法返回
String
进行导航。您只能在实际操作方法中执行此操作。您需要将方法返回类型设置回
void
,并在的帮助下自行导航

<navigation-rule>
        <from-view-id>*</from-view-id>
         <navigation-case>
            <from-action>#{backingBean.selectionListener}</from-action>
            <from-outcome>success</from-outcome>
            <to-view-id>/pages/dummyfolder/results.xhtml</to-view-id>
        </navigation-case>
</navigation-rule>
public void selectionListener(AjaxBehaviorEvent event) {
    // ...

    FacesContext context = FacesContext.getCurrentInstance();
    context.getApplication().getNavigationHandler().handleNavigation(context, "#{backingBean.selectionListener}", "success");
}