私たちの Web プロジェクトでは、JSF Myfaces、Primefaces 3.5 を使用しています。プロジェクト用に独自のprimefacesテーマを作成しました。
css/library などが原因であると思われる次の奇妙な問題を見つけました。
p:dataTable の複数選択チェックボックスは、奇妙な試行で機能します。つまり、ページの最初のロード時に選択が機能します。別のページにアクセスして戻ってくると、チェック ボックスの選択が機能しません。もう 1 ページにアクセスしてカムバックすると、再び機能します。動作しない場合は、ブラウザからページをリロードすると、再び動作します。(問題はすべてのブラウザで同じです)
p:ajaxStatus onstart js 関数は、最初の ajax 呼び出しに対してのみ起動します。以降のすべての呼び出しでは、このイベントは発生しません。ページをリロードすると、最初の ajax 呼び出しで再び起動して停止します。ajax 呼び出しにグローバル設定を設定していません。すべての呼び出しがデフォルトで global = true になっていると思います (問題はすべてのブラウザーで同じです)。
クロムの ap:barChart の場合、x 軸と y 軸のラベルは軸に収まりますが、ページをリロードすると、表示が調整されて正しくなり (Firefox で表示されるように)、セッション中にさらにリロードする必要はありません。他のページから前後に移動する場合でも。
このアプリケーションには上部にメニュー領域があり、auputPanel は ajax メニュー選択に基づいて ui:include を使用して更新されます。
これらの問題の原因と、リロード時に問題なく動作するように見える理由がわかりません。問題はどこにあるのでしょうか?
複数選択チェックボックスに関連する最初の問題のビュー コードは次のとおりです。
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:head>
</h:head>
<h:body>
<h:form id="dataForm">
<p:messages id="tableMsgs" />
<h:panelGroup>
<p:dataTable value="#{usersBean.userDataModel}" var="user"
id="userDataModel" rows="20" paginator="true"
paginatorAlwaysVisible="false" editable="true"
selection="#{usersBean.selectedUsers}"
resizableColumns="false">
<f:facet name="header">
<p:commandButton value="Flag User" process="@form"
action="#{usersBean.flagUser}"
icon="ui-icon-custom-arrow" iconPos="right"
update=":dataForm:tableMsgs"></p:commandButton>
<p:spacer width="10"></p:spacer>
<p:commandButton value="Delete User" process="@form"
icon="ui-icon-custom-arrow" iconPos="right" update="@form"
action="#{usersBean.deleteUser}">
</p:commandButton>
</f:facet>
<p:ajax event="rowEdit" listener="#{usersBean.onEdit}"
oncomplete="resetCSS()"
update=":dataForm:tableMsgs />
<p:ajax event="rowEditCancel" oncomplete="resetCSS()" />
<p:column selectionMode="multiple" style="width:15px;" />
<p:column headerText="Department" sortBy="#{user.dept.name}"
style="white-space:pre-line;width:100px">
<h:outputText value="#{user.dept.name}"
style="white-space:pre-line;width:100px;display:block;">
</h:outputText>
</p:column>
<p:column headerText="UserName" sortBy="#{user.userLoginName}"
style="width:100px;">
<h:outputText value="#{user.userLoginName}"
style="width:100px;display:block;"></h:outputText>
</p:column>
<p:column headerText="Role" sortBy="#{user.role}"
style="width:100px;">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{user.role}"
style="width:100px;display:block;"></h:outputText>
</f:facet>
<f:facet name="input">
<p:selectOneMenu value="#{user.role}" style="width:95px" rendered="#{user.enabled eq true}" >
<f:selectItems
value="#{usersBean.rolesMap[user.dept.deptId]}"
var="role" itemLabel="#{role}" itemValue="#{role}"></f:selectItems>
</p:selectOneMenu>
<h:outputText value="#{user.role}" rendered="#{user.enabled eq false}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Manager" style="width:100px;">
<p:cellEditor>
<f:facet name="output">
<h:outputText
value="#{user.usermanagerByUserId.userByManagerId.userLoginName}"
style="width:100px;display:block;"></h:outputText>
</f:facet>
<f:facet name="input">
<p:selectOneMenu rendered="#{user.enabled eq true}"
value="#{usersBean.managerIdMap[user.userId]}"
style="width:95px;">
<f:selectItems
value="#{usersBean.managerMap[user.dept.deptId]}"
var="manager" itemLabel="#{manager.userLoginName}"
itemValue="#{manager.userId}"></f:selectItems>
</p:selectOneMenu>
<h:outputText
value="#{user.usermanagerByUserId.userByManagerId.userLoginName}" rendered="#{user.enabled eq false}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Email" style="width:100px;">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{user.email}"
style="width:100px;display:block;"></h:outputText>
</f:facet>
<f:facet name="input">
<p:inputText value="#{user.email}" style="width:95px;"
validatorMessage="Enter Valid Email" maxlength="100">
<f:validateRegex
pattern="^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$" />
</p:inputText>
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Last Login" style="width:60px;">
<h:outputText value="#{user.lastLogin}"
style="width:60px;display:block;">
<f:convertDateTime pattern="dd/MM/yyyy"></f:convertDateTime>
</h:outputText>
</p:column>
<p:column headerText="Status" style="width:40px;">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="Enable" rendered="#{user.enabled eq true}"></h:outputText>
<h:outputText value="Disable"
rendered="#{user.enabled eq false}"></h:outputText>
</f:facet>
<f:facet name="input">
<p:selectBooleanCheckbox value="#{user.enabled}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Locked" style="width:40px;">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="Locked" rendered="#{user.locked eq true}"
style="width:40px;display:block;" />
<h:outputText value="UnLocked" style="width:40px;display:block;"
rendered="#{user.locked eq false}"></h:outputText>
</f:facet>
<f:facet name="input">
<p:selectBooleanCheckbox value="#{user.locked}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Edit" style="width:30px;">
<p:rowEditor>
</p:rowEditor>
</p:column>
</p:dataTable>
</h:panelGroup>
</h:form>
</div>