SeamFramework.orgCommunity Documentation
이러한 웹 애플리케이션의 예를 살펴봅시다. JSF를 사용하는 애플리케이션의 사용자 로그인/로그아웃을 구현할 것입니다. 먼저, 로그인시 입력한 사용자 이름 및 암호를 보유하기 위해 Web Bean을 정의합니다:
@Named @RequestScoped
public class Credentials {
private String username;
private String password;
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
}
Web Bean은 다음과 같은 JSF 형식에서 로그인 프롬프트로 바운딩됩니다:
<h:form>
<h:panelGrid columns="2" rendered="#{!login.loggedIn}">
<h:outputLabel for="username"
>Username:</h:outputLabel>
<h:inputText id="username" value="#{credentials.username}"/>
<h:outputLabel for="password"
>Password:</h:outputLabel>
<h:inputText id="password" value="#{credentials.password}"/>
</h:panelGrid>
<h:commandButton value="Login" action="#{login.login}" rendered="#{!login.loggedIn}"/>
<h:commandButton value="Logout" acion="#{login.logout}" rendered="#{login.loggedIn}"/>
</h:form
>
현재 로그인 사용자에 관한 정보를 관리하는 Web Bean 세션 범위에 의해 실제 작업이 완료되어 다른 Web Beans에 User
엔티티를 노출시킵니다:
@SessionScoped @Named
public class Login {
@Current Credentials credentials;
@PersistenceContext EntityManager userDatabase;
private User user;
public void login() {
List<User
> results = userDatabase.createQuery(
"select u from User u where u.username=:username and u.password=:password")
.setParameter("username", credentials.getUsername())
.setParameter("password", credentials.getPassword())
.getResultList();
if ( !results.isEmpty() ) {
user = results.get(0);
}
}
public void logout() {
user = null;
}
public boolean isLoggedIn() {
return user!=null;
}
@Produces @LoggedIn User getCurrentUser() {
return user;
}
}
@LoggedIn
은 바인딩 어노테이션입니다:
@Retention(RUNTIME)
@Target({TYPE, METHOD, FIELD})
@BindingType
public @interface LoggedIn {}
기타 다른 Web Bean은 현재 사용자를 쉽게 삽입할 수 있습니다:
public class DocumentEditor {
@Current Document document;
@LoggedIn User currentUser;
@PersistenceContext EntityManager docDatabase;
public void save() {
document.setCreatedBy(currentUser);
docDatabase.persist(document);
}
}
이러한 예가 Web Bean 프로그래밍 모델의 맛을 보는 계기가 되었으면 합니다. 다음 부분에서는 Web Beans 의존성 삽입에 대해 자세히 살펴보겠습니다.