【发布时间】:2020-06-10 01:06:00
【问题描述】:
我有一个包含不同行的数据表,当我选择特定行时,我不想在特定行上执行任何 onClick 事件。我想防止在 oncomplete 中调用 show() 方法。我尝试了不同的方法,但我无法阻止它。
这是我下面给出的代码。
<h:form id="availableBooksForm">
<p:messages />
<p:panel>
<p:remoteCommand name="show" action="#{boAction.selectPromotion}" />
<p:dataTable id="BooksTable" value="#{userProfile.availableBooks}"
var="res" selectionMode="single" rowKey="#{res.promotionId}"
rows="#{referenceData.recordsPerPage}" lazy="true"
resizableColumns="true" paginator="true"
paginatorTemplate="#{referenceData.paginatorTemplate}"
paginatorPosition="bottom" paginatorAlwaysVisible="false"
style="margin-top: 5px; text-overflow: ellipsis;">
<p:ajax event="rowSelect" listener="#{boAction.onSelectPromotion}"
oncomplete="show()" />
<p:column headerText="#{msg.promotionInfo}">
<p:panelGrid columns="2" columnClasses="pct50,"
style="font-size: 12px">
<h:outputText value="#{msg.promoCode}" />
<h:outputText value="#{res.promoCode}">
<f:convertNumber pattern="#{userProfile.displayStringFormat}" />
</h:outputText>
<h:outputText value="#{msg.promoName}" />
<h:outputText value="#{res.promoName}">
<f:convertNumber pattern="#{userProfile.displayStringFormat}" />
</h:outputText>
</p:panelGrid>
</p:column>
</p:dataTable>
</p:panel>
这里我调用 onSelectPromotion 方法不返回任何内容,如下所示:
public void onSelectPromotion(SelectEvent event) {
String selectedType = ((AllBooks) event.getObject()).getPromoType();
if(selectedType.equals(BookType.getBookType)) {
return;
}
}
在此之后 show() 方法正在调用 boAction.selectPromotion 操作。我不想调用这个方法。如何通过从数据表中选择特定行来防止这种情况发生。
如果我从表中选择行,我不想执行此方法。
public String selectPromotion() {
//some code is executing here
}
【问题讨论】:
-
也许可以尝试通过像
<p:column selectionMode="single" />这样的列中的单选按钮进行选择 -
@fuggerjaki61 该表已经存在,当我们在每一行上进行选择时,它会导航到另一个页面,但是对于某些行并不想根据其中的内容导航到其他页面。所以我试图不在某些选定的行上执行 onselect 事件。
标签: jsf events primefaces listener onselect