データテーブルの行を編集したいのですが、問題があります。データベースに社会保障番号があるかどうかをチェックするバリデーターがあります。追加すると、すべて問題ありません。編集中に問題が発生します。以下は、編集ページのコード フラグメントです。
<h:form>
<div id="userPanel">
<p:panel id="panelUser" header="Edytuj administratora" >
<div id="panelImage">
<img src="./../../images/person4.png" alt="person" width="150px" height="130px"/>
</div>
<h:inputHidden value="#{userMB.user.id}" />
<h:panelGrid columns="3">
<p:outputLabel for="firstName" value="#{msg.firstName}"></p:outputLabel>
<p:inputText id="firstName" value="#{userMB.user.firstName}" label="#{msg.firstName}" required="true">
<f:validator validatorId="firstNameValidator" />
<p:ajax update="msgFristName" event="keyup" />
</p:inputText>
<p:message for="firstName" id="msgFristName"/>
<p:outputLabel for="lastName" value="#{msg.lastName}"></p:outputLabel>
<p:inputText id="lastName" value="#{userMB.user.lastName}" label="#{msg.lastName}" required="true">
<f:validator validatorId="lastNameValidator" />
<p:ajax update="msgLastName" event="keyup" />
</p:inputText>
<p:message for="lastName" id="msgLastName"/>
<p:outputLabel for="personalId" value="#{msg.personalId}"></p:outputLabel>
<p:inputText id="personalId" value="#{userMB.user.personalId}" label="#{msg.personalId}" required="true">
<f:validator binding="#{personalIdValidator}" />
<p:ajax update="msgPersonalId" event="keyup" />
</p:inputText>
<p:message for="personalId" id="msgPersonalId"/>
<p:outputLabel for="password" value="#{msg.password}"></p:outputLabel>
<p:inputText id="password" value="#{userMB.user.password}" label="#{msg.password}" required="true">
<f:validator validatorId="passwordValidator" />
<f:attribute name="confirmPassword" value="#{confirmPassword}" />
<p:ajax update="msgPassword" event="keyup" />
</p:inputText>
<p:message for="password" id="msgPassword"/>
<p:outputLabel for="confirmPassword" value="#{msg.confirmPassword}"></p:outputLabel>
<p:inputText id="confirmPassword" binding="#{confirmPassword}" label="#{msg.confirmPassword}" required="true">
<f:validator validatorId="passwordValidator" />
<f:attribute name="confirmPassword" value="#{confirmPassword}" />
<p:ajax update="msgConfirmPassword" event="keyup" />
</p:inputText>
<p:message for="confirmPassword" id="msgConfirmPassword"/>
</h:panelGrid>
<center><p:commandButton value="#{msg.edit}" action="#{userMB.editUser()}" ajax="false">
<f:param name="userRole" value="admin" />
<f:param name="active" value="true" />
</p:commandButton>
<p:commandButton value="#{msg.cancel}" action="#{userMB.cancel()}" ajax="false" immediate="true"/></center>
</p:panel>
</div>
</h:form>
ユーザーを編集したいときは、次のボタンをクリックします。
<center><p:commandButton value="#{msg.edit}" action="#{userMB.editUser()}" ajax="false">
メソッドを呼び出すeditUser
:
public String editUser() {
FacesContext context = FacesContext.getCurrentInstance();
Map requestParameterMap = (Map) context.getExternalContext().getRequestParameterMap();
try {
String userRole = requestParameterMap.get("userRole").toString();
String active = requestParameterMap.get("active").toString();
Boolean act = Boolean.parseBoolean(active);
user.setRole(userRole);
user.setActive(act);
if ((user.getEmail() != null) && (userDao.findEmailExist(user.getEmail()))) {
sendErrorMessageToUser("Użytkownik z podanym adresem email istnieje w bazie");
return null;
} else if ((user.getPersonalId() != null) && (userDao.findPersonalIdExist(user.getPersonalId()))) {
sendErrorMessageToUser("Użytkownik z podanym numerem pesel istnieje w bazie");
return null;
} else if ((user.getPhone() != null) && (userDao.findPhoneExist(user.getPhone()))) {
sendErrorMessageToUser("Użytkownik z podanym numerem telefonu istnieje w bazie");
return null;
} else {
userDao.update(user);
}
} catch (EJBException e) {
sendErrorMessageToUser("Błąd edycji użytkownika w bazie");
return null;
}
sendInfoMessageToUser("Konto zedytowane");
return user.getRole() + "List";
}
メソッド find personalIdExist は、編集中に指定された personalId が見つかった場合は true を返し、見つからない場合は false を返します。
そして、これは私の問題です。編集ページを編集しているときはUser
、次のようになります: 例:
名前:パブロ
姓: ABCD
個人ID: 12345678901
パスワード: zxcv
personalId を編集しているときはすべて問題ありませんが、のみ編集できfirstName
、は編集できません。同じかもしれません。[編集] をクリックすると問題が発生します。ID が既に存在する場合にメソッドが返され、ユーザーを更新できないためです。このユーザーが編集できるようにするには、このユーザーの初期値 personalId を保存する場所が必要です。しかし、方法がわからない。lastName
password
personalId
PersonalId
personalIdExist
true