Maven、jsf 2.0、Java ee 6、jpa、およびグラスフィッシュを使用しています。サインインするか登録するかを尋ねる最初の Web ページがあります。彼らがサインインしたいと言うと、ユーザー名とパスワードのテキスト ボックスを含むログイン ページを表示する facelets/primefaces 3 に転送されます。ユーザー名テキスト フィールドの場合、その値は
value="#{authenticator.username}"
そして私は
「ターゲットに到達できません。識別子 'authenticator' が null に解決されました」
私は beans.xml を使用しています。CDI Bean の命名規則に従っています。Authenticator コンストラクターにログ メッセージを挿入しましたが、メッセージが表示されないため、呼び出されないようです。
もう1つの奇妙な点は、ブルームーンになると機能し、次のような結果が得られることです。
07/08/2012 00:27:56.140 INFO ...Authenticator - Authenticator コンストラクター内
07/08/2012 00:27:56.171 INFO ...Authenticator - オーセンティケーターのユーザー名を取得しています
07/08/2012 00:27:56.171 INFO ...Authenticator - Authenticator コンストラクター内
07/08/2012 00:27:56.171 INFO ...Authenticator - Authenticator パスワードの取得
07/08/2012 00:27:56.171 INFO ...Authenticator - Authenticator コンストラクター内
07/08/2012 00:27:56.171 INFO ...Authenticator - オーセンティケーターのユーザー名を取得しています
07/08/2012 00:27:56.171 INFO ...Authenticator - Authenticator コンストラクター内
07/08/2012 00:27:56.171 INFO ...Authenticator - Authenticator パスワードの取得
07/08/2012 00:28:05.843 INFO ...Authenticator - Authenticator コンストラクター内
07/08/2012 00:28:05.843 INFO ...Authenticator - Authenticator コンストラクター内
07/08/2012 00:28:05.843 INFO ...Authenticator - Authenticator コンストラクター内
07/08/2012 00:28:05.843 INFO ...Authenticator - オーセンティケーターのユーザー名を取得しています
07/08/2012 00:28:05.843 INFO ...Authenticator - Authenticator コンストラクター内
07/08/2012 00:28:05.906 INFO ...Authenticator - Authenticator コンストラクター内
07/08/2012 00:28:05.906 INFO ...Authenticator - Authenticator パスワードの取得
07/08/2012 00:28:26.000 INFO ...Authenticator - Authenticator コンストラクター内
07/08/2012 00:28:26.000 INFO ...Authenticator - Authenticator コンストラクター内`
07/08/2012 00:28:26.000 INFO ...Authenticator - Authenticator コンストラクター内
07/08/2012 00:28:26.031 INFO ...Authenticator - Authenticator コンストラクター内 07/08/2012 00:28:26.031 INFO ...Authenticator - Authenticator パスワードの取得
それが機能するとき、コンストラクターを何度も呼び出す理由がわかりません。
マネージド (cdi) Bean は次のとおりです。
package com.mlb.mybills.view.user;
import com.mlb.mybills.i18n.Messages;
import java.util.Locale;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ViewScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Named("authenticator")
@ViewScoped
public class Authenticator
{
private static final Logger log = LoggerFactory.getLogger(Authenticator.class);
private String username;
private char[] password;
public Authenticator()
{
log.info("in Authenticator constructor");
}
public String getUsername()
{
log.info("getting Authenticator username");
return username;
}
public void setUsername(String username)
{
log.info("getting Authenticator username");
this.username = username;
}
public char[] getPassword()
{
log.info("getting Authenticator password");
return password;
}
public void setPassword(char[] password)
{
log.info("setting Authenticator password");
this.password = password;
}
public void setPassword(String password)
{
log.info("setting Authenticator password");
this.password = password.toCharArray();
}
public String authenticate()
{
log.info("in Authenticator.authenticate");
String result = null;
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
try
{
request.login(username, new String(password));
//result = "/private/group.xhtml?faces-redirect=true";
result = "/group.xhtml?faces-redirect=true";
}
catch (ServletException ex)
{
log.error("Failed to authenticate user.", ex);
Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
FacesMessage facesMessage = new FacesMessage(FacesMessage.SEVERITY_ERROR, Messages.getString(
"Login.InvalidIdPasswordMessage", locale), null);
FacesContext.getCurrentInstance().addMessage(null, facesMessage);
}
log.info("result=" + result);
return result;
}
public String logout()
{
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
try
{
request.logout();
}
catch (ServletException servletEx)
{
log.warn("Failed to logout the user", servletEx);
}
return "/Login.xhtml?faces-redirect=true";
}
}