説明が見つからないように見えるかなり奇妙な動作を観察しました。次の構造は、サッカーの試合のラインナップ エントリのリストをレンダリングします。
<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 が FIRST エントリを間違って取得するという事実を除いて! 再確認しましたが、繰り返しは正しい値を取得します。ただし、 p:autocomplete は前回の実行の最初の行のみを保持しているようです。また、常に同じ列です。
迷っています。誰かがここで何が起こっているのか知っていますか? 私はPrimefaces 3.5 btwを使用しています。
編集:これは、階層内でそれより上のコンポーネントです。ポップアップは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>