我正在为JSF重构一些旧东西。我有一个用于过滤器的选择菜单。该菜单是为用户动态构建的,并将显示其部门编号,然后显示该部门中的所有主管。我们的想法是重新显示页面并将内容过滤为所有部门数据或仅过滤主管数据。
<p:selectOneMenu id="badge" value="#{bean.badge}" onchange="formHandler()">
<f:selectItem itemLabel="#{auth.employee.lname}, #{auth.employee.fname}" itemValue="&filter=byBadge&badge=#{auth.employee.badge}" />
<f:selectItem itemLabel="Dept #{auth.employee.home_dept_number}" itemValue="&filter=byDept&dept=#{auth.employee.home_dept_number}" />
<f:selectItems value="#{bean.supervisorList}" var="supervisor" itemValue="&filter=byBadge&badge=#{supervisor.badge}" itemLabel="#{supervisor.lname}, #{supervisor.fname} (D#{supervisor.home_dept_number})"/>
</p:selectOneMenu>
这会产生HTML:
<option value="&filter=byDept&dept=abc" > Dept ABC</option>
<option value="&filter=byBadge&badge=12345" > Smith, Mary</option>
<option value="&filter=byBadge&badge=45454" > Jones, John</option>
我的JavaScript formHandler()构建了一个带有参数的新URL
file.xhtml?year=2016&method=pie&method2=week&filter=byBadge&badge=12345
并且支持bean使用这些URL参数就好了,但Primefaces selectOneMenu没有维护正确选择的项目。
旧的方式(jsp)我会把这个放在项目上
<c:if test="${param.filter == 'byBadge' && auth.employee.badge == param.badge }" >selected</c:if>
我愿意采用其他方式来实现这一目标,但不希望必须将每个参数(过滤器和徽章)分解为单独的小部件。