在我的网络应用程序中,我有属于不同项目的列表。我正在使用 p:selectOneMenu 向用户显示所有可用的搜索。我为 Search 类实现了转换器,它按预期工作。现在,我希望用户能够看到按项目搜索。我决定用 p:repeat 包装 p:selectBooleanButton ,它的值与 List 相关联,这样我就有了每个可用项目的 p:selectBooleanButton。此 selectBooleanButtons 放置在 p:selectOneMenu 的页脚方面,以便用户可以轻松切换这些项目按钮并查看/隐藏他们想要的任何项目的搜索。我采用这种方法是因为我们只有两个固定的项目(或者至少在一段时间内将是唯一的项目)。
问题是,每当包含此 p:selectOneMenu 的容器更新时,selectBooleanButtons 会自动设置为 false,即使当我在 booleanButton 为 false 时切换它,它也会将自己设置为 true 并自动将自己设置回 false。我猜这个值被提交了两次,因为它在 p:selectOneMenu 中。
我只是想要一个很好的调试方法,我尝试在支持 bean getter/setter 方法中设置断点,并观察检查器窗格中的 POST 请求,但这并没有真正解决我的问题。也许我以错误的方式接近它。
SelectOneMenu
<p:selectOneMenu
label="Quick Access"
widgetVar="quickAccessDropDownWidget"
style="width: 150px;"
class="available-search-list"
converter="searchConverter"
filter="true"
filterMatchMode="contains"
alwaysDisplayLabel="true"
placeholder="#{not empty deepBean.quickAccessSearchList ? 'Search Name' : 'No Available Searches'}"
editable="false"
var="searchItem"
title="Available Searches for Quick use">
<f:selectItems value="#{deepBean.quickAccessSearchList}"
class="test"
var="search"
itemLabel="#{search}"
itemValue="#{search}"
/>
<p:column style="width: 100%;" class="available-search-list-items">
<span class="row-container">
<i id="" class="#{searchItem.isPublic ? 'pi pi-globe' : 'pi pi-user'}"/>
<p:outputLabel id="searchName" value="#{searchItem.name}" style="margin-left: 10px;"/>
<p:tooltip for="searchName" escape="false" value="#{deepBean.getTooltipInfoForSearch(searchItem)}"/>
<p:outputPanel>
<p:commandButton icon="pi pi-pencil"
class="btn ui-button"
style="margin-left: 20px;"
process="@this"
onclick="onClickSearchEdit('#{searchItem.name}')"/>
<p:commandButton icon="fa fa-send"
class="btn ui-button-success"
style="margin-left: 5px;"
onclick="onClickSearchQuickRun('#{searchItem.name}')"
process="@this"
update="@(.results-view-panel)"/>
</p:outputPanel>
</span>
</p:column>
<f:facet name="footer">
<p:outputLabel value="Search for:" style="font-style: italic; margin-left: 5px;"/>
<p:outputPanel class="project-toggle-btns">
<p:repeat id="projectSelect"
value="#{deepBean.projectList}"
var="project"
>
<p:selectBooleanButton id="project"
value="#{project.selected}"
onLabel="#{project.name}" offLabel="#{project.name}"
onIcon="fa fa-check"
offIcon="fa fa-square-o"
style="margin: 5px; padding: 5px;" >
<p:ajax listener="#{deepBean.toggleProjectSelection()}"
process="@this"
update="@(.dash-board)"
oncomplete="PF('quickAccessDropDownWidget').show();"/>
</p:selectBooleanButton>
<ui:debug/>
</p:repeat>
</p:outputPanel>
</f:facet>
</p:selectOneMenu>