Я хочу иметь возможность переходить на другую страницу, когда пользователь щелкает строку.
Проблемы
- Нет ошибокЯ вижу, что
selectionListener
выполняется с ожидаемым значением строки, но ничего не происходит. - Это правильный способ сделать это, т.е. использовать для этого мой слушатель действия.
Поддерживающий боб - это. Бэк-бин
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;
}
}
Метод selectionListener
получает удар каждый раз, когда пользователь нажимает на элемент строки, не выдается ошибка, но ничего не происходит.
XHTML
<h:form>
<rich:extendedDataTable
value="#{backingBean.names}" var="rowItem"
selection="#{backingBean.selection}" id="table"
frozenColumns="2" style="height:300px; width:500px;" selectionMode="single">
<a4j:ajax event="selectionchange" listener="#{backingBean.selectionListener}" />
<rich:column>
<f:facet name="header">
<h:outputText value="vendor" />
</f:facet>
<h:outputText value="#{rowItem}" />
</rich:column>
</rich:extendedDataTable>
</h:form>
Правило навигации
<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>
При использовании Richfaces 4 не удалось найти тег с версией.