我有一个带有懒惰数据模型和分页的datatable。当我单击“搜索”按钮时,我想禁用默认排序,当我单击“显示”按钮时,我想再次启用默认排序。所以我没有把“sortby”放在我的xhtml文件中,而是在我的backing bean中动态地设置它。
一切都正常工作,直到我点击标题在降序和升序之间翻转排序顺序。这意味着“搜索”按钮将禁用排序,而“显示”按钮将正确启用排序,如果我没有单击标题。但是,当我单击标题,然后单击“搜索”按钮时,在LazyDataModel的加载
功能中,参数sortfield
的值为“date”
,datatable将按日期排序,尽管“date”列显然没有着色!!
这是我的DataTable:
<h:form id="contents-form">
...
<p:dataTable id="tbl" widgetVar="tbl" var="msg" value="#{homeController.messagesModel}" lazy="true"
currentPageReportTemplate="سطر {startRecord}-{endRecord} از {totalRecords}"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
paginator="true" rows="10" rowsPerPageTemplate="5,10,15"
emptyMessage="هیچ پیامکی وجود ندارد."
selection="#{homeController.selectedMessages}" rowSelectMode="checkbox"
rowKey="#{msg.id}" filteredValue="#{homeController.filteredMessage}"
editable="true" editMode="cell"
style="width:100%" dir="rtl">
<f:facet name="header">
<p:commandButton value="خروجی" action="#{homeController.prepareExport}" icon="fa fa-save"
update="export-dlg-box" oncomplete="PF('exportDlgBox').show()"/>
<p:commandButton value="واژگان" action="#{homeController.showListTermsChart}"
icon="fa fa-bar-chart" update="contents-form chart-form msgs"
oncomplete="PF('chartDlgBox').show()"/>
</f:facet>
<p:ajax event="cellEdit" listener="#{homeController.onCellEdit}" oncomplete="updateDescFilter()"/>
<p:column selectionMode="multiple" style="width:16px;text-align:center"/>
<p:column headerText="فرستنده" style="width:100px" filterBy="#{msg.sender.number}"
sortBy="#{msg.sender.number}">
<p:commandLink action="#{homeController.setPhoneNumToShow(msg.sender)}" update="phone-form"
oncomplete="PF('phoneDlgBox').show()" styleClass="simple-command-link">
<h:outputText value="#{msg.sender.number}"/>
</p:commandLink>
</p:column>
<p:column headerText="گیرنده" style="width:100px" filterBy="#{msg.receiver.number}"
sortBy="#{msg.receiver.number}">
<p:commandLink action="#{homeController.setPhoneNumToShow(msg.receiver)}" update="phone-form"
oncomplete="PF('phoneDlgBox').show()" styleClass="simple-command-link">
<h:outputText value="#{msg.receiver.number}"/>
</p:commandLink>
</p:column>
<p:column headerText="متن" sortBy="#{msg.text}">
<h:outputText value="#{msg.getTrimmedText()}"/>
</p:column>
<p:column headerText="زمان" style="width:100px" filterBy="#{msg.date}" sortBy="#{msg.date}">
<f:facet name="filter">
<p:calendar pattern="yyyy-MM-dd">
<p:ajax event="dateSelect" oncomplete="PF('tbl').filter()" update="tbl"/>
</p:calendar>
</f:facet>
<h:outputText value="#{msg.getJalaliDate()}"/>
</p:column>
<p:column headerText="منبع" style="width:70px" filterBy="#{msg.source}" sortBy="#{msg.source}">
<f:facet name="filter">
<p:selectOneMenu onchange="PF('tbl').filter()" style="width:30px; direction:ltr">
<f:selectItem itemLabel="همه" itemValue="#{null}" noSelectionOption="true"/>
<f:selectItems value="#{homeController.sources}" var="source"
itemValue="#{source}" itemLabel="#{source}"/>
</p:selectOneMenu>
</f:facet>
<h:outputText value="#{msg.source}"/>
</p:column>
<p:column headerText="توضیح" style="width:70px" filterBy="#{msg.description}"
sortBy="#{msg.description}">
<f:facet name="filter">
<p:selectOneMenu id="desc-filter-select" onchange="PF('tbl').filter()"
style="width:30px; direction:ltr">
<f:selectItem itemLabel="همه" itemValue="#{null}" noSelectionOption="true"/>
<f:selectItems value="#{homeController.descriptions}" var="desc"
itemValue="#{desc}" itemLabel="#{desc}"/>
</p:selectOneMenu>
</f:facet>
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{msg.description}"/></f:facet>
<f:facet name="input"> <p:inputText id="desc-input" value="#{msg.description}"
style="width:85%"/></f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="جزئیات" style="width:40px">
<p:commandLink action="#{homeController.setMessageToShow(msg)}" ajax="true"
update="img-dlg-box" oncomplete="PF('imgDlgBox').show()">
<i class="fa fa-blue fa-desktop"/>
</p:commandLink>
</p:column>
<p:column headerText="مشاهده گفتگو" style="width:40px">
<p:commandLink action="#{homeController.showConversation(msg.sender, msg.receiver)}"
ajax="true" update="conv-dlg-box" oncomplete="PF('convDlgBox').show()">
<i class="fa fa-blue fa-wechat"/>
</p:commandLink>
</p:column>
</p:dataTable>
</h:form>
我的“搜索”按钮:
<p:commandButton value="جستوجو" action="#{homeController.search}" update=":contents-form:tbl msgs"
icon="fa fa-search"/>
我的“显示”按钮:
<p:commandButton value="نمایش" icon="fa fa-desktop" action="#{homeController.loadArchive}"
update="contents-form msgs"/>
public void search() {
if (this.selectedArchive == null) {
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR, "خطا!", "لطفا یک مجموعه را انتخاب کنید"));
return;
}
if ((this.textQuery != null && !this.textQuery.equals(""))
|| (this.selectedNodes != null && this.selectedNodes.length > 0)) {
logger.info(String.format("searching '%s' in archive %d ...", this.textQuery, this.selectedArchive.getId()));
List<String> selectedWords = this.getSelectedWords(this.selectedNodes);
searchText(this.textQuery, selectedWords);
} else {
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR, "خطا!", "برای جستوجو هیچ متنی وارد نشده و هیچ واژهای انتخاب نشده است."));
return;
}
extractChoices();
// Disable default sorting:
DataTable table = (DataTable) FacesContext.getCurrentInstance().getViewRoot().findComponent(":contents-form:tbl");
table.setValueExpression("sortBy", null);
table.setValueExpression("sortOrder", null);
}
public void loadArchive() {
if (this.selectedArchive == null) {
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR, "خطا!", "لطفا یک مجموعه را انتخاب کنید"));
return;
}
this.messagesModel = new LazyMessageModel(this.selectedArchive, true, this.messageService);
extractChoices();
// Enable default sorting:
FacesContext context = FacesContext.getCurrentInstance();
ExpressionFactory ef = context.getApplication().getExpressionFactory();
DataTable table = (DataTable) context.getViewRoot().findComponent(":contents-form:tbl");
ValueExpression sortVe = ef.createValueExpression(context.getELContext(), "#{msg.date}", Message.class);
table.setValueExpression("sortBy", sortVe);
table.setSortOrder("descending");
logger.info(String.format("archive %d loaded", (this.selectedArchive.getId())));
}
我终于找到了一个干净的解决办法!单击“Search”按钮后,除了设置sortby
null外,还必须重置表:
public void search() {
// Do something ...
DataTable table = (DataTable) FacesContext.getCurrentInstance().getViewRoot().findComponent(":contents-form:tbl");
table.reset();
table.setValueExpression("sortBy", null);
}
问题内容: 添加排序器后,是否可以在JTable上禁用手动排序?因此,我有一个JTable附加了以下排序器(初始化表时,基本上按第3列排序): 效果很好,但是用户仍然可以单击表中的列标题,并按我要禁用的任何列进行排序。这可能吗? 问题答案: 您可以使用 TableRowSorter* 的 setSortable 方法,如下所示: * 使第0列不可排序。您可以根据需要在列上应用它。
问题内容: 如何在WildFly上完全禁用WELD。我不需要它,因为我使用了另一个DI框架。 异常0:javax.enterprise.inject.UnsatisfiedResolutionException:无法使用限定符[@ javax.enterprise.inject.Any(),@ javax.enterprise.inject来解析’org.springframework.data.
我将行排序器应用于,Table检索太多记录,当用户单击表头对特殊字段进行排序时,会导致问题并应用程序崩溃。我想在表尚未完全加载时禁用排序!我该怎么办?
问题内容: JavaFX2的TableView具有“用户在运行时重新排序列”的功能。我想为我的应用程序中的一个特定表禁用此功能。 查看API文档,没有明显的API挂钩。但是,有-property。根据文档,它代表 属于此TableView的TableColumns。当用户重新排序TableView列时,此列表将更新以反映当前的视觉顺序。 希望我至少能够在发生更改后重置更改,所以我尝试添加一个侦听器
我创建了一个全新的、单视图的iOS通用Swift应用程序。然后,我在app设置中取消了“景观左”和“景观右”的勾选。我在我的iPhone上运行它,万岁,无论我怎么旋转手机,它都保持在人像模式。然后我在我的iPad上运行它,它旋转到任何东西。甚至一开始就没有启用的倒置人像模式?只有我一个人经历过吗?当我用命令+箭头键旋转时,这种情况在iPad模拟器中也会发生。 我还尝试将以下内容添加到ViewCon
问题内容: 我已经尝试了所有这三个方法,但均无济于事: 每个都是我通过Google搜索或SO搜索推荐的不同值,但是’ user-scaleable = X ‘值似乎都不起作用 我还尝试了用逗号分隔值,而不是分号,没有运气。然后,我尝试只具有价值,仍然没有运气。 更新 从苹果网站上得到了它,它的工作原理是: 原来问题出在非标准引号上,因为我从使用它们的网站复制了元标记,哎呀 问题答案: 您的代码将属
问题内容: 根据官方的es文档,禁用交换是Elasticsearch可获得的最佳性能提升之一。 但是,事实证明配置起来很困难。我花了很多时间研究并尝试使用不同的方法来使用Kubernetes上的官方ES docker镜像禁用交换。 设置为环境变量时,映像无法启动,并显示错误:。正如文档所指出的那样,这是意料之中的。我什至用设置挂载了一个自定义,但是失败了。 在k8s上使用官方es映像时,建议的禁用
因此,我仍然有点了解JavaFX,我能够禁止在文本框中输入文本,但我不知道如何防止右键单击时出现上下文菜单。有人知道如何防止右键单击时弹出默认上下文菜单吗?`