私はプロファイル編集フォームにこのJava Server Facesバリデーターを使用します。しかし、私はこの問題に遭遇しました。たとえば、ID 45のアカウントを持っています。フォームを送信すると、このIDがすでに存在するというエラーが表示されます。私は成功したアカウントを編集するために自分のIDを許可するように、[送信]をクリックしたときにデータベースから番号を確認してください
public void validateAccountID(FacesContext context, UIComponent component, Object value) throws SQLException
{
Long l;
String s = value.toString().trim();
if (s.length() > 18)
{
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR,
" Value is too long! (18 digits max)", null));
}
try
{
l = Long.parseLong(s);
if (l > Integer.MAX_VALUE)
{
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR,
" '" + l + "' is too large!", null));
}
}
catch (NumberFormatException nfe)
{
l = null;
}
if (l != null)
{
if (ds == null)
{
throw new SQLException("Can't get data source");
}
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs;
int cnt = 0;
try
{
conn = ds.getConnection();
ps = conn.prepareStatement("SELECT count(1) from ACCOUNT where ID = ?");
ps.setLong(1, l);
rs = ps.executeQuery();
while (rs.next())
{
cnt = rs.getInt(1);
}
if (cnt > 0)
{
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR,
" '" + l + "' is already in use!", null));
}
}
catch (SQLException x)
{
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR,
" SQL error!", null));
}
finally
{
if (ps != null)
{
ps.close();
}
if (conn != null)
{
conn.close();
}
}
}
else
{
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR,
s.isEmpty() ? " This field cannot be empty!" : " '" + s + "' is not a number!", null));
}
}
は、だから、私はアカウント45のアカウントのプロフィールページを開いたときに、いくつかのロジックを実装する必要があります。あなたは何かを提案できますか?
はそうあなたが重複アカウントの作成を許可する必要があるフォームの残りのフィールドをユーザーがまだログインしているかどうかを確認し、検証 - : - submition編集フォームで真 2にUserBeanのログインブールフラグを設定しますか? – raven
@Peter Penzov ps.executeUpdate();を実行します。 (cnt> 0) – Unknown