[jboss-cvs] jboss-seam/examples/groovybooking/view ...

Emmanuel Bernard emmanuel.bernard at jboss.com
Wed Apr 18 02:40:04 EDT 2007


  User: ebernard
  Date: 07/04/18 02:40:04

  Added:       examples/groovybooking/view           main.xhtml index.html
                        book.xhtml template.xhtml hotel.xhtml
                        password.xhtml home.xhtml confirm.xhtml
                        conversations.xhtml register.xhtml
  Log:
  JBSEAM-1199 Support for .groovy deployment in WEB-INF/dev Cannot be used to write EJB 3 Groovy session beans
  JBSEAM-1200 Support for Groovy in the seam-gen environment
  
  Revision  Changes    Path
  1.1      date: 2007/04/18 06:40:04;  author: ebernard;  state: Exp;jboss-seam/examples/groovybooking/view/main.xhtml
  
  Index: main.xhtml
  ===================================================================
  <!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <ui:composition 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="https://ajax4jsf.dev.java.net/ajax"
  				template="template.xhtml">
  
  <!-- content -->
  <ui:define name="content">
  
  <div class="section">
    <h:form id="main">
    
      <span class="errors">
         <h:messages globalOnly="true"/>
      </span>
      
  	<h1>Search Hotels</h1>
  	<fieldset> 
  	   <h:inputText id="searchString" value="#{hotelSearch.searchString}" style="width: 165px;">
           <a:support event="onkeyup" actionListener="#{hotelSearch.find}" reRender="searchResults" />
         </h:inputText>
         &#160;
  	   <a:commandButton id="findHotels" value="Find Hotels" action="#{hotelSearch.find}" reRender="searchResults"/>
         &#160;
         <a:status>
            <f:facet name="start">
               <h:graphicImage value="/img/spinner.gif"/>
            </f:facet>
         </a:status>
  	   <br/>
         <h:outputLabel for="pageSize">Maximum results:</h:outputLabel>&#160;
         <h:selectOneMenu value="#{hotelSearch.pageSize}" id="pageSize">
            <f:selectItem itemLabel="5" itemValue="5"/>
            <f:selectItem itemLabel="10" itemValue="10"/>
            <f:selectItem itemLabel="20" itemValue="20"/>
         </h:selectOneMenu>
      </fieldset>
      
    </h:form>
  </div>
  
  <a:outputPanel id="searchResults">
    <div class="section">
  	<h:outputText value="No Hotels Found" rendered="#{hotels != null and hotels.rowCount==0}"/>
  	<h:dataTable id="hotels" value="#{hotels}" var="hot" rendered="#{hotels.rowCount>0}">
  		<h:column>
  			<f:facet name="header">Name</f:facet>
  			#{hot.name}
  		</h:column>
  		<h:column>
  			<f:facet name="header">Address</f:facet>
  			#{hot.address}
  		</h:column>
  		<h:column>
  			<f:facet name="header">City, State</f:facet>
  			#{hot.city}, #{hot.state}, #{hot.country}
  		</h:column> 
  		<h:column>
  			<f:facet name="header">Zip</f:facet>
  			#{hot.zip}
  		</h:column>
  		<h:column>
  			<f:facet name="header">Action</f:facet>
  			<s:link id="viewHotel" value="View Hotel" action="#{hotelBooking.selectHotel(hot)}"/>
  		</h:column>
  	</h:dataTable>
  	<s:link value="More results" action="#{hotelSearch.nextPage}" rendered="#{hotelSearch.nextPageAvailable}"/>
    </div>
  </a:outputPanel>
  
  <div class="section">
  	<h1>Current Hotel Bookings</h1>
  </div>
  <div class="section">
    <h:form id="bookings">
  	<h:outputText value="No Bookings Found" rendered="#{bookings.rowCount==0}"/>
  	<h:dataTable id="bookings" value="#{bookings}" var="book" rendered="#{bookings.rowCount>0}">
  		<h:column>
  			<f:facet name="header">Name</f:facet>
  			#{book.hotel.name}
  		</h:column>
  		<h:column>
  			<f:facet name="header">Address</f:facet>
  			#{book.hotel.address}
  		</h:column>
  		<h:column>
  			<f:facet name="header">City, State</f:facet>
  			#{book.hotel.city}, #{book.hotel.state}
  		</h:column>
          <h:column>
              <f:facet name="header">Check in date</f:facet>
              <h:outputText value="#{book.checkinDate}"/>
          </h:column>
          <h:column>
              <f:facet name="header">Check out date</f:facet>
              <h:outputText value="#{book.checkoutDate}"/>
          </h:column>
  		<h:column>
  			<f:facet name="header">Confirmation number</f:facet>
  			#{book.id}
  		</h:column>
  		<h:column>
  			<f:facet name="header">Action</f:facet>
  			<h:commandLink id="cancel" value="Cancel" action="#{bookingList.cancel}"/>
  		</h:column>
  	</h:dataTable>
    </h:form>
  </div>
  
  </ui:define>
  
  <!-- sidebar -->
  <ui:define name="sidebar">
  
  <h1>State management in Seam</h1>
  <p>
     State in Seam is <em>contextual</em>. When you click "Find Hotels", the application
     retrieves a list of hotels from the database and caches it in the session context. When you
     navigate to one of the hotel records by clicking the "View Hotel" link, a <em>conversation</em> 
     begins. The conversation is attached to a particular tab, in a particular browser window. You can
     navigate to multiple hotels using "open in new tab" or "open in new window" in your web browser.
     Each window will execute in the context of a different conversation. The application keeps state
     associated with your hotel booking in the conversation context, which ensures that the concurrent
     conversations do not interfere with each other.
  </p>
  
  <p>
     <a href="#" onclick="window.open('exp/mainExp.html','exp','width=752,height=500,scrollbars=yes');">
        How does the search page work?
     </a>
  </p>
  
  </ui:define>
  
  </ui:composition>
  
  
  
  1.1      date: 2007/04/18 06:40:04;  author: ebernard;  state: Exp;jboss-seam/examples/groovybooking/view/index.html
  
  Index: index.html
  ===================================================================
  <html>
  <head>
    <meta http-equiv="Refresh" content="0; URL=home.seam">
  </head>
  </html>
  
  
  1.1      date: 2007/04/18 06:40:04;  author: ebernard;  state: Exp;jboss-seam/examples/groovybooking/view/book.xhtml
  
  Index: book.xhtml
  ===================================================================
  <!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <ui:composition 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="https://ajax4jsf.dev.java.net/ajax"
  				template="template.xhtml">
  
  <!-- content -->
  <ui:define name="content">
  <div class="section">
  	<h1>Book Hotel</h1>
  </div>
  <div class="section">
  	<h:form id="booking">
  	<fieldset>
  		<div class="entry">
  			<div class="label">Name:</div>
  			<div class="output">#{hotel.name}</div>
  		</div>
  		<div class="entry">
  			<div class="label">Address:</div>
  			<div class="output">#{hotel.address}</div>
  		</div>
  		<div class="entry">
  			<div class="label">City, State:</div>
  			<div class="output">#{hotel.city}, #{hotel.state}</div>
  		</div>
  		<div class="entry">
  			<div class="label">Zip:</div>
  			<div class="output">#{hotel.zip}</div>
  		</div>
  		<div class="entry">
  			<div class="label">Country:</div>
  			<div class="output">#{hotel.country}</div>
  		</div>
          <div class="entry">
              <div class="label">Nightly rate:</div>
              <div class="output">
                  <h:outputText value="#{hotel.price}">
                      <f:convertNumber type="currency"  
                                       currencySymbol="$"/>
                  </h:outputText>
              </div>
          </div>
  		
  		<s:validateAll>
      
              <f:facet name="aroundInvalidField">
                  <s:span styleClass="errors"/>
              </f:facet>
              <f:facet name="afterInvalidField">
                  <s:div styleClass="errors">
                 	    <s:message/>
                 	</s:div>
              </f:facet>
  		    
  			<div class="entry">
                              <div class="label"><h:outputLabel for="checkinDate">Check In Date:</h:outputLabel></div>
                              <div class="input">
                                  <s:decorate id="checkinDateDecorate">
                                      <h:inputText id="checkinDate" value="#{booking.checkinDate}" required="true">
                                          <s:convertDateTime pattern="MM/dd/yyyy"/>
                                          <a:support event="onblur" reRender="checkinDateDecorate"/>
                                      </h:inputText>
                                      <s:selectDate for="checkinDate">
                                          <h:graphicImage url="img/dtpick.gif" style="margin-left:5px;cursor:pointer"/>
                                      </s:selectDate>
                                  </s:decorate>
                              </div>
  			</div>
  			
  			<div class="entry">
                              <div class="label"><h:outputLabel for="checkoutDate">Check Out Date:</h:outputLabel></div>
                              <div class="input">
                                  <s:decorate id="checkoutDateDecorate">
                                      <h:inputText id="checkoutDate" value="#{booking.checkoutDate}" required="true">
                                          <s:convertDateTime pattern="MM/dd/yyyy"/>
                                          <a:support event="onblur" reRender="checkoutDateDecorate"/>
                                      </h:inputText>
                                      <s:selectDate for="checkoutDate">
                                          <h:graphicImage url="img/dtpick.gif" style="margin-left:5px;cursor:pointer"/>
                                      </s:selectDate>
                                  </s:decorate>
                              </div>
                          </div>
  
  			<div class="entry">
  				<div class="label"><h:outputLabel for="beds">Room Preference:</h:outputLabel></div>
  				<div class="input">
  					<s:decorate>
  						<h:selectOneMenu id="beds" value="#{booking.beds}">
  							<f:selectItem itemLabel="One king-size bed" itemValue="1"/>
  							<f:selectItem itemLabel="Two double beds" itemValue="2"/>
  							<f:selectItem itemLabel="Three beds" itemValue="3"/>
  						</h:selectOneMenu>
  					</s:decorate>
  				</div>
  			</div>
  			
  			<div class="entry">
  				<div class="label"><h:outputLabel for="smoking">Smoking Preference:</h:outputLabel></div>
  				<div id="radio" class="input">
  					<s:decorate>
  						<h:selectOneRadio id="smoking" value="#{booking.smoking}" layout="pageDirection">
  							<f:selectItem itemLabel="Smoking" itemValue="true"/>
  							<f:selectItem itemLabel="Non Smoking" itemValue="false"/>
  						</h:selectOneRadio>
  					</s:decorate>
  				</div>
  			</div>
  			
  			<div class="entry">
  				<div class="label"><h:outputLabel for="creditCard">Credit Card #:</h:outputLabel></div>
  				<div class="input">
  					<s:decorate id="creditCardDecorate">
  						<h:inputText id="creditCard" value="#{booking.creditCard}" required="true">
                             <a:support event="onblur" reRender="creditCardDecorate"/>
                          </h:inputText>
  					</s:decorate>
  				</div>
  			</div>
  			
  			<div class="entry">
  				<div class="label"><h:outputLabel for="creditCardName">Credit Card Name:</h:outputLabel></div>
  				<div class="input">
  					<s:decorate id="creditCardNameDecorate">
  						<h:inputText id="creditCardName" value="#{booking.creditCardName}" required="true">
                             <a:support event="onblur" reRender="creditCardNameDecorate"/>
                          </h:inputText>
  					</s:decorate>
  				</div>
  			</div>
  			
  			<div class="entry">
  				<div class="label"><h:outputLabel for="creditCardExpiryMonth">Credit Card Expiry:</h:outputLabel></div>
  				<div class="input">
  					<s:decorate>
  						<h:selectOneMenu id="creditCardExpiryMonth" value="#{booking.creditCardExpiryMonth}">
  							<f:selectItem itemLabel="Jan" itemValue="1"/>
  							<f:selectItem itemLabel="Feb" itemValue="2"/>
  							<f:selectItem itemLabel="Mar" itemValue="3"/>
  							<f:selectItem itemLabel="Apr" itemValue="4"/>
  							<f:selectItem itemLabel="May" itemValue="5"/>
  							<f:selectItem itemLabel="Jun" itemValue="6"/>
  							<f:selectItem itemLabel="Jul" itemValue="7"/>
  							<f:selectItem itemLabel="Aug" itemValue="8"/>
  							<f:selectItem itemLabel="Sep" itemValue="9"/>
  							<f:selectItem itemLabel="Oct" itemValue="10"/>
  							<f:selectItem itemLabel="Nov" itemValue="11"/>
  							<f:selectItem itemLabel="Dec" itemValue="12"/>
  						</h:selectOneMenu>
  						<h:selectOneMenu id="creditCardExpiryYear" value="#{booking.creditCardExpiryYear}">
  							<f:selectItem itemLabel="2005" itemValue="2005"/>
  							<f:selectItem itemLabel="2006" itemValue="2006"/>
  							<f:selectItem itemLabel="2007" itemValue="2007"/>
  							<f:selectItem itemLabel="2008" itemValue="2008"/>
  							<f:selectItem itemLabel="2009" itemValue="2009"/>
  						</h:selectOneMenu>
  					</s:decorate>
  				</div>
  			</div>
  			
  		</s:validateAll>
  		
  		<div class="entry errors">
  			<h:messages globalOnly="true"/>
  		</div>
  		
  		<div class="entry">
  			<div class="label">&#160;</div>
  			<div class="input">
  				<h:commandButton id="proceed" value="Proceed" action="#{hotelBooking.setBookingDetails}"/>&#160;
  				<s:button id="cancel" value="Cancel" action="#{hotelBooking.cancel}"/>
  			</div>
  		</div>		
  	</fieldset>
  	</h:form>
  </div>
  </ui:define>
  
  <!-- sidebar -->
  <ui:define name="sidebar">
  
  <h1>Workspace management</h1>
  <p>
     As you can see, Seam makes it easy to work in multiple windows or multiple browser 
     tabs. But you can even switch between multiple tasks inside a single browser tab!
     The "Workspaces" section showcases this advanced feature.
  </p>
  <p>
     <a href="#" onclick="window.open('exp/workspaceExp.html','exp','width=752,height=500,scrollbars=yes');">
        How does the workspace list work?
     </a>
  </p>
  
  </ui:define>
  
  </ui:composition>
  
  
  
  1.1      date: 2007/04/18 06:40:04;  author: ebernard;  state: Exp;jboss-seam/examples/groovybooking/view/template.xhtml
  
  Index: template.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:s="http://jboss.com/products/seam/taglib">
  <head>
  	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  	<title>JBoss Suites: Seam Framework</title>
  	<link href="css/screen.css" rel="stylesheet" type="text/css" />
  	<link href="css/date.css" rel="stylesheet" type="text/css" />
  </head>
  <body>
  
  <div id="document">
  	<div id="header">
  		<div id="title"><img src="img/hdr.title.gif" alt="JBoss Suites: seam framework demo"/></div>
  		<div id="status">
              Welcome #{user.name}
              | <s:link id="search" view="/main.xhtml" value="Search" propagation="none"/>
              | <s:link id="settings" view="/password.xhtml" value="Settings" propagation="none"/>
              | <s:link id="logout" action="#{identity.logout}" value="Logout"/>
  		</div>
  	</div>
  	<div id="container">
  		<div id="sidebar">
  			<ui:insert name="sidebar"/>
  		</div>
  		<div id="content">
  			<ui:insert name="content"/>
  		    <ui:include src="conversations.xhtml" />
  		</div>
  	</div>
  	<div id="footer">Created with Groovy, JBoss Seam, and Facelets</div>
  </div>
  </body>
  </html>
  
  
  
  1.1      date: 2007/04/18 06:40:04;  author: ebernard;  state: Exp;jboss-seam/examples/groovybooking/view/hotel.xhtml
  
  Index: hotel.xhtml
  ===================================================================
  <!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <ui:composition 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"
  				template="template.xhtml">
  
  <!-- content -->
  <ui:define name="content">
  <div class="section">
  	<h1>View Hotel</h1>
  </div>
  <div class="section">
  	<div class="entry">
  		<div class="label">Name:</div>
  		<div class="output">#{hotel.name}</div>
  	</div>
  	<div class="entry">
  		<div class="label">Address:</div>
  		<div class="output">#{hotel.address}</div>
  	</div>
  	<div class="entry">
  		<div class="label">City:</div>
  		<div class="output">#{hotel.city}</div>
  	</div>
  	<div class="entry">
  		<div class="label">State:</div>
  		<div class="output">#{hotel.state}</div>
  	</div>
  	<div class="entry">
  		<div class="label">Zip:</div>
  		<div class="output">#{hotel.zip}</div>
  	</div>
  	<div class="entry">
  		<div class="label">Country:</div>
  		<div class="output">#{hotel.country}</div>
  	</div>
      <div class="entry">
          <div class="label">Nightly rate:</div>
          <div class="output">
              <h:outputText value="#{hotel.price}">
                  <f:convertNumber type="currency" 
                                   currencySymbol="$"/>
              </h:outputText>
          </div>
      </div>
  </div>
  <div class="section">
  	<h:form id="hotel">
  	<fieldset class="buttonBox">
  		<h:commandButton id="bookHotel" action="#{hotelBooking.bookHotel}" value="Book Hotel"/>&#160;
  		<h:commandButton id="cancel" action="#{hotelBooking.cancel}" value="Back to Search"/>
  	</fieldset>
  	</h:form>
  </div>
  </ui:define>
  
  <!-- sidebar -->
  <ui:define name="sidebar">
  
  <h1>Don't kill your database</h1>
  <p>
      Keeping conversational state in memory in the middle tier is a great way to
      improve your application's scalability. It saves hitting the database every
      time we refresh a page, to re-read the data we were just looking at five 
      seconds ago. By using Seam's conversation context, we get a natural cache 
      of data associated with the what the user is currently doing. By nature, 
      this cache has a more efficient eviction policy than the MRU-type algorithms 
      used by a typical second-level data cache in an O/R mapping engine like
      Hibernate (at least for some kinds of data). Of course, you should use 
      a clever combination of second-level caching and conversational data
      caching to achieve the best performance for your application.
  </p>
  <p>
     <a href="#" onclick="window.open('exp/bookingExp.html','exp','width=752,height=500,scrollbars=yes');">
        How does the hotel booking wizard work?
     </a>
  </p>
  
  </ui:define>
  
  </ui:composition>
  
  
  
  1.1      date: 2007/04/18 06:40:04;  author: ebernard;  state: Exp;jboss-seam/examples/groovybooking/view/password.xhtml
  
  Index: password.xhtml
  ===================================================================
  <!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <ui:composition 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"
  				template="template.xhtml">
  
  <!-- content -->
  <ui:define name="content">
  <div class="section">
  	<h1>Change Your Password</h1>
  </div>
  <div class="section">
  	<h:form id="setpassword">
  	
  	    <f:facet name="aroundInvalidField">
              <s:span styleClass="errors"/>
  	    </f:facet>
   	    <f:facet name="afterInvalidField">
              <s:div styleClass="errors">
                  <s:message/>
              </s:div>
   	    </f:facet>
  		    
  		<fieldset>
  		
  			<div class="entry">
  				<div class="label"><h:outputLabel for="password">Password:</h:outputLabel></div>
  				<div class="input">
  					<s:decorate>
  						<h:inputSecret id="password" value="#{user.password}" required="true">
  							<s:validate/>
  						</h:inputSecret>
  					</s:decorate>
  				</div>
  			</div>
  			
  			<div class="entry">
  				<div class="label"><h:outputLabel for="verify">Verify:</h:outputLabel></div>
  				<div class="input">
  					<s:decorate>
  						<h:inputSecret id="verify" value="#{changePassword.verify}" required="true"/>
  					</s:decorate>
  				</div>
  			</div>
  			
  			<div class="entry errors">
  				<h:messages globalOnly="true"/>
  			</div>
  			
  			<div class="entry">
  				<div class="label">&#160;</div>
  				<div class="input">
  					<h:commandButton id="change" value="Change" action="#{changePassword.changePassword}"/>&#160;
  					<s:button id="cancel" value="Cancel" view="/main.xhtml"/>
  				</div>
  			</div>
  			
  		</fieldset>
  		
  	</h:form>
  </div>
  </ui:define>
  
  <!-- sidebar -->
  <ui:define name="sidebar">
  <h1>Simple things should be easy</h1>
  <p>
      (And so should some complex things.) You shouldn't have to write four different classes
      just to change a password. Traditional J2EE architectures require that developers spend
      more time writing code to make the frameworks happy, than they ever get to spend writing
      code to make the user happy. Seam lets you reduce the size of your code dramatically.
      And that reduces bugs. And it makes refactoring easier. And it makes delivering new 
      functionality quicker. Productivity matters. But with Seam, JSF, EJB 3.0 and jBPM, you 
      don't need to sacrifice the ability to handle complex problems just to achieve great
      productivity.
  </p>
  </ui:define>
  
  </ui:composition>
  
  
  1.1      date: 2007/04/18 06:40:04;  author: ebernard;  state: Exp;jboss-seam/examples/groovybooking/view/home.xhtml
  
  Index: 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">
  <head>
  	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  	<title>JBoss Suites: Seam Framework</title>
  	<link href="css/screen.css" rel="stylesheet" type="text/css" />
  </head>
  <body id="pgHome">
  <f:view>
  <div id="document">
  	<div id="header">
  		<div id="title"><img src="img/hdr.title.gif" alt="JBoss Suites: seam framework demo"/></div>
  	</div>
  	<div id="container">
  		<div id="sidebar">
              <h:form id="login">
  			<fieldset>
  				<div>
  					<h:outputLabel for="username">Login Name</h:outputLabel>
  					<h:inputText id="username" value="#{identity.username}" style="width: 175px;"/>
  					<div class="errors"><h:message for="username"/></div>
  				</div>
  				<div>
  					<h:outputLabel for="password">Password</h:outputLabel>
  					<h:inputSecret id="password" value="#{identity.password}" style="width: 175px;"/>
  				</div>
  				<div class="errors"><h:messages globalOnly="true"/></div>
  				<div class="buttonBox"><h:commandButton id="login" action="#{identity.login}" value="Account Login"/></div>
  				<div class="notes"><s:link id="register" view="/register.xhtml" value="Register New User"/></div>
  			</fieldset>
              </h:form>
  		</div>
  		<div id="content">
  			<div class="section">
  				
  			    <h1>About this example application</h1>
  			    
  			    <p>
  			       This sample application demonstrates how easy it is to develop stateful web 
  			       applications using JBoss Seam. Just register, login, and book a room to see 
  			       Seam in action. Throughout the application you'll see popup links like 
  			       the ones at the bottom of this page. Click them to see how the application 
  			       works under the hood.
                  </p>
  			    
  			    <p>
  			       Note: Please do NOT enter personal information or your credit card number in 
  			       this sample application.
  			    </p>
  			    
  			    <p>
  			       <a href="#" onclick="window.open('exp/introExp.html','exp','width=752,height=500,scrollbars=yes');">
  			          What is JBoss Seam?
  			       </a>
                  </p>
  			    
  			    <p>
  			       <a href="#" onclick="window.open('exp/loginExp.html','exp','width=752,height=500,scrollbars=yes');">
  			          What happens when I login?
  			       </a>
                  </p>
  								
  			</div>
  		</div>
  	</div>
  	<div id="footer">Created with JBoss EJB 3.0, Seam, MyFaces, and Facelets</div>
  </div>
  </f:view>
  </body>
  </html>
  
  
  
  1.1      date: 2007/04/18 06:40:04;  author: ebernard;  state: Exp;jboss-seam/examples/groovybooking/view/confirm.xhtml
  
  Index: confirm.xhtml
  ===================================================================
  <!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <ui:composition 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"
  				template="template.xhtml">
  
  <!-- content -->
  <ui:define name="content">
  <div class="section">
  	<h1>Confirm Hotel Booking</h1>
  </div>
  <div class="section">
  	<h:form id="confirm">
  	<fieldset>
  		<div class="entry">
  			<div class="label">Name:</div>
  			<div class="output">#{hotel.name}</div>
  		</div>
  		<div class="entry">
  			<div class="label">Address:</div>
  			<div class="output">#{hotel.address}</div>
  		</div>
  		<div class="entry">
  			<div class="label">City, State:</div>
  			<div class="output">#{hotel.city}, #{hotel.state}</div>
  		</div>
  		<div class="entry">
  			<div class="label">Zip:</div>
  			<div class="output">#{hotel.zip}</div>
  		</div>
  		<div class="entry">
  			<div class="label">Country:</div>
  			<div class="output">#{hotel.country}</div>
  		</div>
          <div class="entry">
              <div class="label">Total payment:</div>
              <div class="output">
                  <h:outputText value="#{booking.total}">
                      <f:convertNumber type="currency" 
                                       currencySymbol="$"/>
                  </h:outputText>
              </div>
          </div>
  		<div class="entry">
  			<div class="label">Check In Date:</div>
  			<div class="output"><h:outputText value="#{booking.checkinDate}"/></div>
  		</div>
  		<div class="entry">
  			<div class="label">Check Out Date:</div>
  			<div class="output"><h:outputText value="#{booking.checkoutDate}"/></div>
  		</div>
  		<div class="entry">
  			<div class="label">Credit Card #:</div>
  			<div class="output">#{booking.creditCard}</div>
  		</div>
  		<div class="entry">
  			<div class="label">&#160;</div>
  			<div class="input">
  				<h:commandButton id="confirm" value="Confirm" action="#{hotelBooking.confirm}"/>&#160;
      			<s:button id="revise" value="Revise" view="/book.xhtml"/>&#160;
      			<h:commandButton id="cancel" value="Cancel" action="#{hotelBooking.cancel}"/>
  			</div>
  		</div>
  	</fieldset>
  	</h:form>
  </div>
  </ui:define>
  
  <!-- sidebar -->
  <ui:define name="sidebar">
  <h1>Back button navigation</h1>
  <p>
     When you click "Confirm", the new booking is written to the database, the 
     conversation ends, and state associated with the conversation is automatically 
     destroyed by Seam. After you confirm your booking, try hitting the back button
     on your web browser and clicking "Confirm" again. Seam makes it easy implement
     applications that behave elegantly in response to the back, forward and refresh
     buttons.
  </p>
  <p>
     <a href="#" onclick="window.open('exp/confirmExp.html','exp','width=752,height=500,scrollbars=yes');">
        What happens when the conversation ends?
     </a>
  </p>
  </ui:define>
  
  </ui:composition>
  
  
  
  1.1      date: 2007/04/18 06:40:04;  author: ebernard;  state: Exp;jboss-seam/examples/groovybooking/view/conversations.xhtml
  
  Index: conversations.xhtml
  ===================================================================
  <!-- DOCTYPE div PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" -->
  <div xmlns="http://www.w3.org/1999/xhtml"
       xmlns:c="http://java.sun.com/jstl/core"
       xmlns:ui="http://java.sun.com/jsf/facelets"
       xmlns:f="http://java.sun.com/jsf/core"
       xmlns:h="http://java.sun.com/jsf/html"
       xmlns:s="http://jboss.com/products/seam/taglib">
       
  <div class="section">
      <h1><h:outputText rendered="#{not empty conversationList}" value="Workspaces"/></h1>
  </div>
  
  <div class="section">
      <h:form>
          <h:dataTable value="#{conversationList}" var="entry">
              <h:column>
                  <h:commandLink action="#{entry.select}" value="#{entry.description}"/>
                  &#160;
                  <h:outputText value="[current]" rendered="#{entry.current}"/>
              </h:column>
              <h:column>
                  <h:outputText value="#{entry.startDatetime}">
                      <s:convertDateTime type="time" pattern="hh:mm"/>
                  </h:outputText>
                  -
                  <h:outputText value="#{entry.lastDatetime}">
                      <s:convertDateTime type="time" pattern="hh:mm"/>
                  </h:outputText>
              </h:column>
          </h:dataTable>
      </h:form>
  </div>
  
  </div>
  
  
  1.1      date: 2007/04/18 06:40:04;  author: ebernard;  state: Exp;jboss-seam/examples/groovybooking/view/register.xhtml
  
  Index: 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="https://ajax4jsf.dev.java.net/ajax">
  <head>
  	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  	<title>JBoss Suites: Seam Framework</title>
  	<link href="css/screen.css" rel="stylesheet" type="text/css" />
  </head>
  <body id="pgHome">
  <div id="document">
  	<div id="header">
  		<div id="title"><img src="img/hdr.title.gif" alt="JBoss Suites: seam framework demo"/></div>
  	</div>
  	<div id="container">
  		<div id="sidebar">		    
  			<h1>Integrated multi-layer validation</h1>
  			<p>
  			    Robust applications need data validation in several different places. Seam integrates Hibernate Validator,
  			    a set of annotations for expressing data model constraints in your domain model classes. Then, these 
  			    constraints are applied almost completely transparently at three levels of the application: by Seam when 
  			    the user first enters data, by EJB before persisting data to the database, and, if you use Hibernate to 
  			    generate your database schema, by the database constraints themselves. Multi-layer validation hardens
  			    your application and protects your data. Even better, it's self-documenting, and easy to change when
  			    your business rules change.
  			</p>
  			<p>
  			   <a href="#" onclick="window.open('exp/registerExp.html','exp','width=752,height=500,scrollbars=yes');">
  			      What happens when I register?
  			   </a>
  			</p>
  		</div>
  		<div id="content">
  			<div class="section">
  				<h1>Register</h1>
  			</div>
  			<div class="section">
                  
                  <h:form id="register">
  				<fieldset>
  				
                      <s:validateAll>
  
                         <f:facet name="aroundInvalidField">
                             <s:span styleClass="errors"/>
                         </f:facet>
                         <f:facet name="afterInvalidField">
                             <s:div styleClass="errors">
                 	               <s:message/>
                 	           </s:div>
                         </f:facet>
  		    
  						<div class="entry">
  							<div class="label"><h:outputLabel for="username">Username:</h:outputLabel></div>
  							<div class="input">
  								<s:decorate id="usernameDecorate">
  									<h:inputText id="username" value="#{user.username}" required="true">
                                          <a:support event="onblur" reRender="usernameDecorate"/>
                                      </h:inputText>
  								</s:decorate>
  							</div>
  						</div>
  						
  						<div class="entry">
  							<div class="label"><h:outputLabel for="name">Real Name:</h:outputLabel></div>
  							<div class="input">
  								<s:decorate id="nameDecorate">
  									<h:inputText id="name" value="#{user.name}" required="true">
                                          <a:support event="onblur" reRender="nameDecorate"/>
                                      </h:inputText>
  								</s:decorate>
  							</div>
  						</div>
  						
  						<div class="entry">
  							<div class="label"><h:outputLabel for="password">Password:</h:outputLabel></div>
  							<div class="input">
  								<s:decorate>
  									<h:inputSecret id="password" value="#{user.password}" required="true"/>
  								</s:decorate>
  							</div>
  						</div>
  						
  						<div class="entry">
  							<div class="label"><h:outputLabel for="verify">Verify Password:</h:outputLabel></div>
  							<div class="input">
  								<s:decorate>
  									<h:inputSecret id="verify" value="#{register.verify}" required="true"/>
  								</s:decorate>
  							</div>
  						</div>
  
  					</s:validateAll>
  					
  					<div class="entry errors">
  						<h:messages globalOnly="true"/>
  					</div>
  					
  					<div class="entry">
  						<div class="label">&#160;</div>
  						<div class="input">
  							<h:commandButton id="register" value="Register" action="#{register.register}"/>&#160;
  							<s:button id="cancel" value="Cancel" view="/home.xhtml"/>
  						</div>
  					</div>
  					
  				</fieldset>
                  </h:form>
                  
  			</div>			
  		</div>
  	</div>
  	<div id="footer">Created with JBoss EJB 3.0, Seam, MyFaces, and Facelets</div>
  </div>
  </body>
  </html>
  
  
  



More information about the jboss-cvs-commits mailing list