私は PrimFaces モバイル従業員ディレクトリ アプリに取り組んでおり、障害にぶつかっています。2 つの画面 (従業員フィルター/リスト + 従業員の詳細) で構成されるシンプルなアプリです。
問題なくデータリストをロードできました。コマンドリンクをクリックすると、従業員の詳細が適切に読み込まれます。その後、カスタム従業員フィルターを実装することができましたが、これは少し面倒でしたが、うまくいきました。フィルターは、従業員データリストのモデルにフィルター処理された結果を再入力することによって機能します。
問題は、フィルターを使用してデータリストを再作成/フィルター処理した後、従業員 (コマンドリンク) をクリックしても正しい従業員 ID がモデルに返されないことです。代わりに、フィルターが実行される前に存在していた従業員 ID が渡されます。JSF モデルが DOM と一致していないようです。
私は使用しています:
- TomEE (MyFaces 2.1.7)
- プライムフェイス モバイル 0.9.3
- プライムフェイス 3.3
私のバッキングモデルは両方とも @ViewScoped です
<pm:view id="peopleDirView" onload="">
<pm:header title="People Directory" fixed="true">
</pm:header>
<pm:content>
<h:form id="form">
<div data-role="fieldcontain">
<fieldset data-role="controlgroup">
<p:inputText id="searchCriteria" value="#{peopleDirectoryBean.criteria}" type="search"
onkeyup="delay(function() {filterResults();}, 500);" />
</fieldset>
</div>
<p:dataList id="peopleDataList" value="#{peopleDirectoryBean.people}" var="person" rowIndexVar="rowIndex">
<p:column>
<p:commandLink action="#{peopleDirectoryDetailBean.loadPersonDetail(person.employeeId)}" update=":personDetailView">
<img src="/phonedir/people/image/#{person.employeeId}?width=75&height=100" width="90" height="100"
onerror="missingImage(this);" id="per-search-picture" />
<h1>#{person.nameLast}, #{person.nameFirst}</h1>
<p>#{person.deptName}</p>
<p>#{person.jobTitle}</p>
</p:commandLink>
</p:column>
</p:dataList>
<p:remoteCommand name="filterResults" update="peopleDataList" action="#{peopleDirectoryBean.peopleSearch}" />
</h:form>
</pm:content>
<pm:footer fixed="true">
<pm:navBar>
<p:button value="People" icon="home" href="#peopleDirView?reverse=true" styleClass="ui-btn-active" />
<p:button value="Locations" icon="info" href="#locationsView?reverse=true" />
<p:button value="Conference" icon="search" href="#conferenceRoomsView?reverse=true" />
</pm:navBar>
</pm:footer>
<script>
var delay = (function() {
var timer = 0;
return function(callback, ms) {
clearTimeout(timer);
timer = setTimeout(callback, ms);
};
})();
function missingImage(image) {
image.onerror = "";
image.src = "missing-person.jpg";
return true;
}
</script>
</pm:view>