首页 > 解决方案 > 如何对 datagrid primefaces 中的数据进行排序?

问题描述

我正在尝试使用 commandlink 按钮对数据进行排序,因为它只会按 1 件事排序,即日期。

我在 NetBeans 中显示的错误“属性 sortBy 未在 outputText 中定义,未知属性“startDate””是否有任何解决方法可用于使用命令链接进行排序?或者当'我点击时,它会排序'“但不像用户必须从下拉列表中选择的选择菜单。

这是我的 index.xhtml 文件

<p:panel header="job" class="card card-w-title ui-fluid">
                <p:panelGrid id="idSortBy" columns="2" layout="grid" styleClass="ui-panelgrid-blank form-group"  
                             columnClasses="ui-grid-col-6,ui-grid-col-6">
                    <h:outputText value="Sort By : " style="font-weight:bold;"/>
                    <h:commandLink id="sort">
                        <h:outputText value="Date" sortBy="#{homeMBean.startDate}" style="color: black; font-weight: bold; "/>
                    </h:commandLink>
                </p:panelGrid>
                <p:dataGrid var="list" value="#{homeMBean.listJob}" 
                            lazy="true"
                            columns="3" layout="grid"
                            rows="12" paginator="true" id="jobId"
                            paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                            paginatorPosition="bottom" emptyMessage="Data Not Found"
                            rowsPerPageTemplate="6,12,16" class="no-border no-padding">
                    <p:panel style="text-align: left;" class="no-border no-padding">

                        <h:panelGroup class="no-border no-padding">
                            <h:panelGrid columns="1" style="width:100%;background-color: #f1a955;" class="no-border no-padding"> 
                                <h:outputText value="#{list.jobs}" style="font-weight: bold"/>
                                <h:outputText class="fa fa-map-marker" value="&#160;#{list.region}, #{list.city}" style="margin-left: 7%;" />
                                <p:separator style="border-color: #ffffff; color: #ffffff;" />
                                <p:panelGrid id="idPgHeader" columns="3" layout="grid" styleClass="ui-panelgrid-blank form-group" 
                                             columnClasses="ui-grid-col-4,ui-grid-col-4,ui-grid-col-4">
                                    <h:commandLink id="share">
                                        <i class="fa fa-share-alt" style="color: black"/>
                                        <h:outputText value="&#160;Share" escape="false" style="color: black;"/>
                                    </h:commandLink>
                                    <h:commandLink id="save">
                                        <i class="fa fa-heart-o" style="color: black"/>
                                        <h:outputText value="&#160;Save"  escape="false" style="color: black;"/>
                                    </h:commandLink>
                                    <h:commandLink id="apply" action="form.xhtml?faces-redirect=true" target="_blank">
                                        <i class="fa fa-hand-o-up" style="color: black"/>
                                        <h:outputText value="&#160;Apply" escape="false" style="color: black;"/>
                                    </h:commandLink>
                                </p:panelGrid>
                            </h:panelGrid>
                        </h:panelGroup>
                    </p:panel>
                </p:dataGrid>
            </p:panel>

这是我的家MBean

@Controller
@SpringScopeView
@Data
public class HomeMBean extends AbstractManagedBean implements InitializingBean {

    private final String apijobActive = "mstjobActive";
    @Autowired
    private BackendNoLoginService backendNoLoginService;
    @Autowired
    private BackendService backendService;

    private LazyDataModelApiJPA<jobView> listjob;

    @Override
    public void afterPropertiesSet() throws Exception {
        JSONObject jSONObject = new JSONObject();
        listjob = new LazyDataModelApiJPA<jobView>(backendService,
                apijobActive, null, jobView[].class) {
        };

    }

这是我的JobController

@PostMapping(value = "/page-request-active")
public List<LowonganKerjaProjection> getListPageRequestIsActive(
        @RequestBody(required = true) JobViewWrapper wrapper) {
    log.debug(wrapper.toString());
    System.out.println("get to controller ");
    PageRequest pageRequest = null;
    if (wrapper.getPageReqWrapper().getSortField() == null) {
        System.out.println("get to if controller pagereq");
        pageRequest = PageRequest.of(
                wrapper.getPageReqWrapper().getPage(),
                wrapper.getPageReqWrapper().getSize());
    } else {
        System.out.println("get to else controller pagereq");
        Sort sort = null;
        String sortField = wrapper.getPageReqWrapper().getSortField();
        if (sortField.equals("job")) {
            sortField = "job_name";
        } else if (sortField.equals("startDate")){
            sortField = "start_date";
        }
        if (wrapper.getPageReqWrapper().getSortOrder().isAscending()) {
            sort = Sort.by(sortField).ascending();
        } else {
            sort = Sort.by(sortField).descending();
        }
        pageRequest = PageRequest.of(
                wrapper.getPageReqWrapper().getPage(),
                wrapper.getPageReqWrapper().getSize(),
                sort);
    }
    log.debug(pageRequest.toString());
    System.out.println("Prepare to lazyView service");
    return jobService.findLazyViewByIsActive(pageRequest);
}

标签: springspring-bootjsfprimefaces

解决方案


推荐阅读