0 Replies Latest reply on Feb 18, 2010 12:57 PM by pavan kumar

    I got the Following error While deploying the seam apllication

    pavan kumar Newbie
      17:17:02,971 ERROR [application] JSF1010: Illegal view ID #. The ID must begin with '/'
      17:17:02,986 ERROR [STDERR] Feb 18, 2010 5:17:02 PM com.sun.facelets.FaceletViewHandler handleRenderException
      SEVERE: Error Rendering View[/register.xhtml]
      java.lang.IllegalArgumentException: Illegal view ID #.  The ID must begin with /
           at com.sun.faces.application.ViewHandlerImpl.getActionURL(ViewHandlerImpl.java:660)
           at org.jboss.seam.jsf.SeamViewHandler.getActionURL(SeamViewHandler.java:74)
           at org.ajax4jsf.application.ViewHandlerWrapper.getActionURL(ViewHandlerWrapper.java:92)
           at com.sun.facelets.FaceletViewHandler.getActionURL(FaceletViewHandler.java:803)
           at org.ajax4jsf.application.ViewHandlerWrapper.getActionURL(ViewHandlerWrapper.java:92)
           at org.jboss.seam.ui.util.ViewUrlBuilder.<init>(ViewUrlBuilder.java:25)
           at org.jboss.seam.ui.component.UISeamCommandBase.getUrl(UISeamCommandBase.java:37)
           at org.jboss.seam.ui.renderkit.ButtonRendererBase.getOnClick(ButtonRendererBase.java:37)
           at org.jboss.seam.ui.renderkit.ButtonRendererBase.doEncodeBegin(ButtonRendererBase.java:71)
           at org.jboss.seam.ui.util.cdk.RendererBase.encodeBegin(RendererBase.java:79)
           at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:813)
           at javax.faces.component.UIComponent.encodeAll(UIComponent.java:934)
           at javax.faces.render.Renderer.encodeChildren(Renderer.java:148)
           at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
           at javax.faces.component.UIComponent.encodeAll(UIComponent.java:936)
           at javax.faces.component.UIComponent.encodeAll(UIComponent.java:942)
           at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)
           at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
           at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:216)
           at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:109)
           at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
           at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
           at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
           at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
           at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
           at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
           at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:85)
           at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
           at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
           at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
           at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:44)
           at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
           at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
           at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
           at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:60)
           at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
           at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58)
           at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
           at org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:68)
           at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
           at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
           at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
           at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
           at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
           at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
           at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
           at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
           at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
           at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
           at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
           at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
           at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
           at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
           at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
           at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
           at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
           at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
           at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
           at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
           at java.lang.Thread.run(Unknown Source)




      My Logic is as follows:

      Authenticator.java

      package org.jboss.seam.example.creationofxhtml;

      import javax.ejb.Local;

      @Local
      public interface Authenticator
      {
         boolean authenticate();
      }




      AuthenticatorAction.java

      package org.jboss.seam.example.creationofxhtml;

      import static org.jboss.seam.ScopeType.SESSION;

      import java.util.List;

      import javax.ejb.Stateless;
      import javax.persistence.EntityManager;
      import javax.persistence.PersistenceContext;

      import org.jboss.seam.annotations.Name;
      import org.jboss.seam.annotations.Out;

      @Stateless
      @Name("authenticator")
      public class AuthenticatorAction implements Authenticator
      {
         @PersistenceContext
         private EntityManager em;
        
         @Out(required=false, scope = SESSION)
         private User user;
        
         public boolean authenticate()
         {
            List results = em.createQuery("select u from User u where u.username=#{identity.username} and u.password=#{identity.password}")
                  .getResultList();
           
            if ( results.size()==0 )
            {
               return false;
            }
            else
            {
               user = (User) results.get(0);
               return true;
            }
         }

      }


      User.java

      package org.jboss.seam.example.creationofxhtml;

      import java.io.Serializable;

      import javax.persistence.Entity;
      import javax.persistence.Id;
      import javax.persistence.Table;

      import org.hibernate.validator.Length;
      import org.hibernate.validator.NotNull;
      import org.hibernate.validator.Pattern;
      import org.jboss.seam.annotations.Name;
      import org.jboss.seam.annotations.Scope;
      import static org.jboss.seam.ScopeType.SESSION;
      @Entity
      @Name("user")
      @Scope(SESSION)
      @Table(name="Members")

      public class User implements Serializable {
           
           private String username;
           private String password;
           private String name;
           
            public User(String name, String password, String username)
              {
                 this.name = name;
                 this.password = password;
                 this.username = username;
              }
             
              public User() {}

              @NotNull
              @Length(max=100)
              public String getName()
              {
                 return name;
              }
              public void setName(String name)
              {
                 this.name = name;
              }
             
              @NotNull
              @Length(min=5, max=15)
              public String getPassword()
              {
                 return password;
              }
              public void setPassword(String password)
              {
                 this.password = password;
              }
             
              @Id
              @Length(min=4, max=15)
              @Pattern(regex="^\\w*$", message="not a valid username")
              public String getUsername()
              {
                 return username;
              }
              public void setUsername(String username)
              {
                 this.username = username;
              }
             
              @Override
              public String toString()
              {
                 return "User(" + username + ")";
              }
           }



      Register.java

      package org.jboss.seam.example.creationofxhtml;

      import javax.ejb.Local;

      @Local
      public interface Register {
              public void register();
              public void invalid();
              public String getVerify();
              public void setVerify(String verify);
              public boolean isRegistered();
              public void destroy();

      }
      RegisterAction.java

      package org.jboss.seam.example.creationofxhtml;

      import java.util.List;

      import javax.ejb.Remove;
      import javax.ejb.Stateful;
      import javax.persistence.EntityManager;
      import javax.persistence.PersistenceContext;

      import static org.jboss.seam.ScopeType.EVENT;

      import org.jboss.seam.annotations.In;
      import org.jboss.seam.annotations.Name;
      import org.jboss.seam.annotations.Scope;
      import org.jboss.seam.faces.FacesMessages;

      @Stateful
      @Scope(EVENT)
      @Name("register")
      public class RegisterAction implements Register {
           @In
           private User user;
           @PersistenceContext
           EntityManager em;
           @In
           private FacesMessages facesMessages;
           private String verify;
           private boolean registered;
           public void register()
              {
                 if ( user.getPassword().equals(verify) )
                 {
                    List existing = em.createQuery("select u.username from User u where u.username=#{user.username}")
                       .getResultList();
                    if (existing.size()==0)
                    {
                       em.persist(user);
                       facesMessages.add("Successfully registered as #{user.username}");
                       registered = true;
                    }
                    else
                    {
                       facesMessages.addToControl("username", "Username #{user.username} already exists");
                    }
                 }
                 else
                 {
                    facesMessages.addToControl("verify", "Re-enter your password");
                    verify=null;
                 }
              }
             
              public void invalid()
              {
                 facesMessages.add("Please try again");
              }
             
              public boolean isRegistered()
              {
                 return registered;
              }
              public String getVerify()
              {
                 return verify;
              }
              public void setVerify(String verify)
              {
                 this.verify = verify;
              }
             
              @Remove
              public void destroy() {}
           
           
           

      }

      register.xhtml


      <!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"
            xmlns:s="http://jboss.com/products/seam/taglib"
            xmlns:a="http://richfaces.org/a4j">

      <head>
           <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
           <link  href="css/bcolor.css" type="text/css" rel="stylesheet"/>
           <title>Project Management</title>
      </head>

      <body class="bccolor">
                <table class="bccolor2" width="100%">
                     <tr align="right">
                                         <td align="center"><img src="images/logo-b.png" align="center" />Project Management</td>
                                    <table align="right">
                                         <tr >
                                         
                                              <td ><img  src="images/desktop1.bmp" hspace="4px" /></td>
                                              <td ><img  src="images/user.jpg" hspace="4px"  align="right"/></td>
                                              <td ><img  src="images/settings.jpg" hspace="4px"/></td>
                                              <td ><img  src="images/logout.jpg" hspace="4px"/></td>
                                         </tr>
                                    </table>
                      </tr>
                     </table>
                <div class="centeralign">
                     <h:form id="registration">
                          <s:validateAll>
                               <h:panelGrid columns="2">
                                    <h:outputText value="User Name" style="COLOR: #c0c0c0; FONT-SIZE: large;"></h:outputText>
                                    <h:inputText  id="username" value="#{user.username}"  required="true"/>
                                    
                                    <h:outputText value="Real Name" style="COLOR: #c0c0c0; FONT-SIZE: large;"></h:outputText>
                                    <h:inputText id="name"  value="#{user.name}" required="true" />
                                    
                                    <h:outputText value="Password" style="COLOR: #c0c0c0; FONT-SIZE: large;"></h:outputText>
                                    <h:inputSecret id="password" value="#{user.password}"  required="true"/>
                                    
                                    <h:outputText value="Verify Password" style="COLOR: #c0c0c0; FONT-SIZE: large;"></h:outputText>
                                    <h:inputSecret id="verify" value="#{register.verify}"  required="true" />
                                    
                               </h:panelGrid>
                                              
                          </s:validateAll>
                          <div class="buttonBox">
                               <h:commandButton action="#{register.register}" value="Register" id="register" style="COLOR: #800000;"/>
                               <s:button id="cancel" value="Cancel" view="#" style="COLOR: #800000;"></s:button>
                          </div>
                     </h:form>
                
                
                
                </div>
           
           
      </body>

      </html>


      home.xhtml

      <!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"
            xmlns:s="http://jboss.com/products/seam/taglib"
            xmlns:a="http://richfaces.org/a4j">

      <head>
           <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
           <link  href="css/bcolor.css" type="text/css" rel="stylesheet"/>
           <title>Project Management</title>
      </head>

      <body class="bccolor">
                <table class="bccolor2" width="100%">
                     <tr align="right">
                                         <td align="center"><img src="images/logo-b.png" align="center" />Project Management</td>
                                    <table align="right">
                                         <tr >
                                         
                                              <td ><img  src="images/desktop1.bmp" hspace="4px" /></td>
                                              <td ><img  src="images/user.jpg" hspace="4px"  align="right"/></td>
                                              <td ><img  src="images/settings.jpg" hspace="4px"/></td>
                                              <td ><img  src="images/logout.jpg"  hspace="4px"/></td>
                                         </tr>
                                    </table>
                      </tr>
                     </table>
           <h:form id="login">          
                <div>
                     <h:panelGrid columns="2">
                          <h:outputLabel for="username" style="COLOR: #c0c0c0; FONT-SIZE: large;">LoginName</h:outputLabel>
                          <h:inputText value="#{identity.username}" id="username" style="width: 175px;"/>
                          
                          <h:outputLabel for="password" style="COLOR: #c0c0c0; FONT-SIZE: large;">Password</h:outputLabel>
                          <h:inputSecret value="#{identity.password}"  id="password" style="width: 175px;"/>
                     </h:panelGrid>
                    <div class="buttonBox"><h:commandButton id="login" action="#{identity.login}" value="Account Login" style="COLOR: #804000;"/></div>
                    <div class="notes"><s:link id="register" view="/register.xhtml" value="Register New User"/></div>
                
                </div>
      </h:form>
      </body>

      </html>