我观察到一个相当奇怪的行为,我似乎无法找到解释。以下结构呈现足球比赛的阵容条目列表:
<h:head/>
<h:body>
<ui:composition xmlns:teams="http://java.sun.com/jsf/composite/teams">
<h:panelGroup id="layerFragment">
<ui:fragment rendered="#{abean.showLayer}">
<ui:repeat var="e" value="#{abean.bbean.entries}" varStatus="status">
<tr>
<td><h:outputText value="#{status.index+1}" />.</td>
<td>
<h:selectOneMenu id="position" value="#{e.position}"
converter="PositionConverter">
<f:selectItems value="#{abean.positions}" />
</h:selectOneMenu>
</td>
<td>
<h:outputLabel class="inv" for="name" value="#{e.player}" />
<p:autoComplete id="name" value="#{e.spieler}"
completeMethod="#{abean.completePlayer}" var="s1"
itemLabel="#{s1.name}" itemValue="#{s1}"
converter="SpielerConverter">
<p:ajax event="itemSelect"
listener="#{abean.playerCompleted}" update="position"/>
</p:autoComplete>
</td>
</tr>
</ui:repeat>
...
如您所见,它包含一个自动完成字段和每行一个下拉菜单,但总的来说它完全是普通的。现在我将它嵌入到一个组件中,该组件是从命令链接覆盖的。当我单击它时,将显示叠加层并呈现阵容。
这可以从阵容列表中调用,被覆盖和渲染。所有这些都工作正常。除了 p:autocomplete 得到第一个条目错误的事实之外!我仔细检查过,重复得到了正确的值。但是, p:autocomplete 似乎只保留了前一次运行的第一行。它也总是在同一行。
我搞不清楚了。有人知道这里发生了什么吗?我正在使用 Primefaces 3.5 顺便说一句。
编辑:这是层次结构中它上面的组件。弹出窗口在 layer.xhtml 中定义。leftcolumn.xhtml 中的阵容列表。
<?xml version="1.0" encoding="UTF-8" ?>
<ui:composition template="/admin/template/master_layout.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:param name="viewName" value="ticker" />
<ui:define name="windowTitle">Tickern</ui:define>
<ui:define name="leftcolumn">
<ui:include src="/fussball/leftcolumn.xhtml" />
</ui:define>
<ui:define name="breadcrumb">
<ui:include src="/fussball/breadcrumb.xhtml" />
</ui:define>
<ui:define name="content">
<ui:include src="/fussball/ticker.xhtml" />
</ui:define>
<ui:define name="layer">
<ui:include src="/fussball/layer.xhtml" />
</ui:define>
</ui:composition>