0

テーブルを表示しています。ユーザーがヘッダーをクリックすると、選択したヘッダーに従ってソートされたテーブルが再編成されます。同じヘッダーをもう一度クリックすると、並べ替えの順序が入れ替わります。テーブル内には、いくつかのcommandLinkがあります。

さて、問題は次のとおりです

  1. 並べ替え順序の最初の更新が行われますが、ヘッダーをもう一度クリックしても順序は入れ替わりません。
  2. テーブルが更新されると、リンクの値は変更されますが、リンクは以前に存在していたオブジェクトにマップされます。

コード:

テーブル:

<h:form title="table">
<h:dataTable value="#{employee.employeeList}" var="a"
    styleClass="order-table" headerClass="order-table-header"
    rowClasses="order-table-odd-row,order-table-even-row"
    style="width:100%">
<h:column>
<f:facet name="header"><h:commandLink value="Number" action="#{employee.sortByNumber()}" /></f:facet>
<h:commandLink value="#{a.number}" action="#{employee.setEmp(a)}" />
</h:column>
...
...
...
</h:dataTable>
</h:form>

従業員Bean:

public String filter = ""; //has getters and setters
public String order = ""; //has getters and setters
public static final String ORDER_ASCENDING = "asc";
public static final String ORDER_DESCENDING = "desc";
public static final String FILTER_NUMBER = "number";

public void sortByNumber(){
        if(filter.equals(FILTER_NUMBER)){
            swapOrder();
        }else{
            filter = FILTER_NUMBER;
            order = ORDER_ASCENDING;
        }
        refreshPage();
    }
public void swapOrder(){
        if(order.equals(ORDER_ASCENDING)){
            order = ORDER_DESCENDING;
        }else{
            order = ORDER_ASCENDING;
        }
    }
public void refreshPage(){
        FacesContext context = FacesContext.getCurrentInstance();
        String viewId = context.getViewRoot().getViewId();
        ViewHandler handler = context.getApplication().getViewHandler();
        UIViewRoot root = handler.createView(context, viewId);
        root.setViewId(viewId);
        context.setViewRoot(root);
    }

public String setEmp(Employee employee) {
        this.employee = employee;
        return "details"; //redirects to the details page where the employee set in  the previous line is used
    }
4

0 に答える 0