получить строку из rich: таблица привязки с данными - PullRequest
2 голосов
/ 25 января 2012

Я использую java 6 jsf 1.2 и richfaces 3.3.3 Когда я вызываю функцию getRowData для Binded UIDataTable

public void priorityChanged(ValueChangeEvent event) {
        Task currentTask = (Task) table.getRowData();

с

<h:selectOneMenu id="id182_#{rkv}" value="#{dataItem.priority}"
    valueChangeListener="#{customerAdminHandler.priorityChanged}"
    onchange="submit()">
    <f:selectItems value="#{customerAdminHandler.priorityTypes}" />
</h:selectOneMenu>

я получаю исключение для table.getRowData ();

java.lang.IllegalArgumentException
    at javax.faces.model.ListDataModel.getRowData(ListDataModel.java:150)
    at org.ajax4jsf.model.SequenceDataModel.getRowData(SequenceDataModel.java:147)
    at org.ajax4jsf.component.UIDataAdaptorBase.getRowData(UIDataAdaptorBase.java:257)

Ответы [ 2 ]

1 голос
/ 25 января 2012

Я обошел проблему с помощью

<f:setPropertyActionListener value="#{dataItem}"
                            target="#{customerProductsHandler.currentApp}" />

вместо таблицы привязок. тот же код работал для меня в чистой среде, поэтому я думаю, что есть какая-то проблема с jar.

в любом случае, для дальнейшего использования я нашел следующую информацию полезной для использования таблицы привязок

Richfaces 3.3 uses:
org.richfaces.component.html.HtmlDataTable

Richfaces 4  uses:
org.richfaces.component.UIDataTable

jsf1.2  uses:
javax.faces.component.html.HtmlDataTable;

jsf 2  uses:
import javax.faces.model.DataModel;
0 голосов
/ 25 января 2012

Связали ли вы rich:dataTable с атрибутом компонента вашего управляемого компонента? Кроме того, тип атрибута должен быть org.richfaces.component.html.HtmlDataTable, по крайней мере, так мы добились выбора одной строки таблицы данных (используя пример кода @BalusC здесь ).

JSP код:

<script type="text/javascript">
    function dataTableSelectOneRadio(radio) {
        var id = radio.name.substring(radio.name.lastIndexOf(':'));
        var el = radio.form.elements;
        for (var i = 0; i < el.length; i++) {
            if(el[i].name != undefined) {
                if (el[i].name.substring(el[i].name.lastIndexOf(':')) == id) {
                    el[i].checked = false;
                }
            }
        }
        radio.checked = true;
    }
</script>
<!-- some html/jsp code -->
<rich:dataTable id="dtDocCartera" style="width:100%"
    binding="#{busquedaDocCartera.hdtCredito}"
    value="#{busquedaDocCartera.lstCredito}" var="credito" rows="15">
    <rich:column>
        <f:facet name="header">
            <h:outputText value="Select" />
        </f:facet>
        <h:selectOneRadio onclick="dataTableSelectOneRadio(this)"
            valueChangeListener="#{busquedaDocCartera.setSelectedItem}">
            <f:selectItem itemValue="null"/>
        </h:selectOneRadio>
    </rich:column>
    <rich:column style="text-align:center">
        <f:facet name="header">
            <h:outputText value="Some Data" />
        </f:facet>
        <h:outputText value="#{credito.data}" />
    </rich:column>
</rich:dataTable>

А это наш управляемый боб:

@KeepAlive(ajaxOnly=false)
public class PBusquedaDocCartera {
    private HtmlDataTable hdtCredito;
    private List<ECredito> lstCredito;
    //This will be the selected data
    private ECredito credito;
    //getters and setters for attributes...
    public void setSelectedItem(ValueChangeEvent event) {
        try {
            credito = (ECredito)hdtCredito.getRowData();
        } catch (Exception objEx) {
            //logging errors...
        }
    }
}
...