Hello all,

New to JSF and Seam here so I'm trying to work out a few kinks.  I have created 
a simple JSF/Facelets application that "just worked" when deploying to JBoss AS 
4.2.0 GA.

Converting that same application to take advantage of Seam has been a headache 
and a half.  Currently everything seems to be good except that when my form on 
my Login.xhtml page attempts to submit I get the following error:

First, my environment: JBoss AS 4.2 GA, jboss-seam-CVS.20070521, java 1.5.0_06, 
MyEclipse 5.5 GA, Facelets 1.1.11.

javax.servlet.ServletException: /Login.xhtml @41,51 value="#{user.userName}": 
Target Unreachable, identifier 'user' resolved to null
  |     javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
  |     
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
  | 
  | root cause
  | 
  | javax.el.PropertyNotFoundException: /Login.xhtml @41,51 
value="#{user.userName}": Target Unreachable, identifier 'user' resolved to null
  |     
com.sun.facelets.el.TagValueExpression.getType(TagValueExpression.java:62)
  |     
com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:81)
  |     javax.faces.component.UIInput.getConvertedValue(UIInput.java:934)
  |     javax.faces.component.UIInput.validate(UIInput.java:860)
  |     javax.faces.component.UIInput.executeValidate(UIInput.java:1065)
  |     javax.faces.component.UIInput.processValidators(UIInput.java:666)
  |     javax.faces.component.UIForm.processValidators(UIForm.java:229)
  |     
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1030)
  |     javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:662)
  |     
com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:100)
  |     com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
  |     com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
  |     javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
  |     
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
  | 

I have since modeled my application as closely as possible to the 
"registration" example that comes with the Seam CVS nightly build.  The main 
differences being that I am deploying it as a WAR since I created the project 
w/out using the seam-gen utility.  All libraries (jboss-seam.jar, 
jboss-seam-ui.jar, jsf-facelets.jar, jboss-el.jar) are in the WEB-INF/lib 
directory of the war.

Here is my backing bean code:

/**
  |  * 
  |  */
  | package ***.***.netprov.bean;
  | 
  | import static org.jboss.seam.ScopeType.SESSION;
  | 
  | import java.io.Serializable;
  | 
  | import javax.faces.application.FacesMessage;
  | import javax.faces.context.FacesContext;
  | 
  | import org.jboss.seam.annotations.Name;
  | import org.jboss.seam.annotations.Scope;
  | 
  | /**
  |  * @author strickla
  |  */
  | @Name("user")
  | @Scope(SESSION)
  | public class User implements Serializable {
  | 
  |     /**
  |      * The name of the user
  |      */
  |     private String userName;
  | 
  |     /**
  |      * The password of the user
  |      */
  |     private String userPassword;
  | 
  |     public User() {
  | 
  |     }
  | 
  |     public User(String userName, String userPassword) {
  |             this.userName = userName;
  |             this.userPassword = userPassword;
  |     }
  | 
  |     /**
  |      * @return the userName
  |      */
  |     public String getUserName() {
  |             return userName;
  |     }
  | 
  |     /**
  |      * @param userName
  |      *            the userName to set
  |      */
  |     public void setUserName(String userName) {
  |             this.userName = userName;
  |     }
  | 
  |     /**
  |      * @return the userPassword
  |      */
  |     public String getUserPassword() {
  |             return userPassword;
  |     }
  | 
  |     /**
  |      * @param userPassword
  |      *            the userPassword to set
  |      */
  |     public void setUserPassword(String userPassword) {
  |             this.userPassword = userPassword;
  |     }
  | 
  |     public String loginUser() {
  |             if ("myeclipse".equals(getUserName())
  |                             && "myeclipse".equals(getUserPassword())) {
  |                     return "success";
  |             } else {
  |                     FacesContext fCtx = FacesContext.getCurrentInstance();
  |                     FacesMessage fMsg = new FacesMessage(
  |                                     "You have entered an invalid username 
and/or password.");
  |                     fCtx.addMessage("loginForm", fMsg);
  |                     return "failure";
  |             }
  |     }
  | 
  | }
  | 

and my stateless session bean:


  | package ***.***.netprov.bean;
  | 
  | import java.util.Date;
  | 
  | import javax.ejb.Stateless;
  | 
  | import org.jboss.seam.annotations.In;
  | import org.jboss.seam.annotations.Logger;
  | import org.jboss.seam.annotations.Name;
  | import org.jboss.seam.log.Log;
  | 
  | @Stateless
  | @Name("login")
  | public class LoginAction implements Login {
  | 
  |     @In(create=true)
  |     private User user;
  | 
  |     @Logger
  |     private static Log log;
  | 
  |     public String login() {
  |             log.info("User " + user.getUserName() + " attempted to log in @ 
"
  |                             + new Date());
  |             return user.loginUser();
  |     }
  | }
  | 

and finally, the Login.xhtml page:


  | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.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";>
  |     <head>
  |             <title>JSF Facelets 'Login' Page</title>
  |             <meta http-equiv="Content-Type"
  |                     content="text/html; charset=iso-8859-1" />
  |             <meta http-equiv="pragma" content="no-cache" />
  |             <meta http-equiv="cache-control" content="no-cache" />
  |             <meta http-equiv="expires" content="0" />
  |             <meta http-equiv="keywords" 
content="keyword1,keyword2,keyword3" />
  |             <meta http-equiv="description" content="This is my page" />
  |             <!--
  |     <link rel="stylesheet" type="text/css" href="styles.css">
  |     -->
  | 
  |     </head>
  | 
  |     <body>
  |             <ui:composition template="./template.xhtml">
  | 
  |                     <ui:define name="title">
  |                             JSF Facelets Login Tutorial
  |                     </ui:define>
  | 
  |                     <ui:define name="body">
  |                             <f:loadBundle 
basename="mil.disa.netprov.MessageBundle" var="bundle"></f:loadBundle>
  |                             <form jsfc="h:form" id="loginForm">
  |                                     <table>
  |                                             <tr>
  |                                                     <td>
  |                                                             <label 
jsfc="h:outputLabel" value="#{bundle.userNameLabel}"
  |                                                                     
for="userNameTxt" rendered="true">
  |                                                                     <span 
jsfc="ui:remove">Username:</span>
  |                                                             </label>
  |                                                     </td>
  |                                                     <td>
  |                                                             <input 
jsfc="h:inputText" id="userNameTxt" required="true"
  |                                                                     
rendered="true" value="#{user.userName}"></input>
  |                                                     </td>
  |                                             </tr>
  |                                             <tr>
  |                                                     <td>
  |                                                             <label 
jsfc="h:outputLabel" value="#{bundle.userPasswordLabel}"
  |                                                                     
for="userPasswordTxt" rendered="true">
  |                                                                     <span 
jsfc="ui:remove">Password:</span>
  |                                                             </label>
  |                                                     </td>
  |                                                     <td>
  | 
  |                                                             <input 
jsfc="h:inputSecret" id="userPasswordTxt"
  |                                                                     
redisplay="false" required="true" rendered="true"
  |                                                                     
value="#{user.userPassword}"></input>
  |                                                     </td>
  |                                             </tr>
  |                                             <tr>
  |                                                     <td>
  |                                                             <button 
jsfc="h:commandButton" id="submitButton"
  |                                                                     
action="#{login.login}" rendered="true"
  |                                                                     
value="#{bundle.loginButtonLabel}" />
  |                                                     </td>
  |                                             </tr>
  |                                     </table>
  |                             </form>
  |                     </ui:define>
  |             </ui:composition>
  |     </body>
  | </html>
  | 

Can anyone tell me what I'm doing wrong?  My gut instincts at this point are 
telling me that I should have started with seam-gen script, and that I must set 
up some sort of database that I then use to bind my backing bean to with the 
Seam/EJB integration.

Do I *HAVE* to use the @Entity annotation in my backing bean and use the 
Seam/EJB integration if I'm going to use Seam to manage my beans or do I have 
to stick with declaring them in my faces-config.xml file and let JSF manage 
them?

Any help is appreciated!

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4048066#4048066

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4048066
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to