Expanded tabs into spaces.
This commit is contained in:
committed by
Rossen Stoyanchev
parent
7aa70a437e
commit
ef9d94c2a3
@@ -51,10 +51,10 @@
|
||||
|
||||
<div id="bookingForm">
|
||||
|
||||
<div class="span-5">
|
||||
<div class="span-5">
|
||||
|
||||
<h3 th:text="${booking.hotel.name}">The Herb Plaza</h3>
|
||||
|
||||
<h3 th:text="${booking.hotel.name}">The Herb Plaza</h3>
|
||||
|
||||
<address th:object="${booking.hotel}">
|
||||
<span th:text="*{address}">Thyme Square, 13</span>
|
||||
<br />
|
||||
@@ -65,13 +65,13 @@
|
||||
<span th:text="*{country}">Earth</span>
|
||||
</address>
|
||||
|
||||
<p>
|
||||
Nightly rate: <span th:text="${booking.hotel.price}">400.00</span>
|
||||
</p>
|
||||
<p>
|
||||
Nightly rate: <span th:text="${booking.hotel.price}">400.00</span>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="span-12">
|
||||
<div class="span-12">
|
||||
|
||||
<form id="booking" action="#" th:object="${booking}" th:action="${flowExecutionUrl}" method="post">
|
||||
|
||||
@@ -81,187 +81,187 @@
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<fieldset>
|
||||
<legend>Book Hotel</legend>
|
||||
<div>
|
||||
<div class="span-4">
|
||||
<label for="checkinDate">Check In:</label>
|
||||
</div>
|
||||
<div class="span-7 last">
|
||||
<p><input type="text" th:field="*{checkinDate}" /></p>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.ElementDecoration({
|
||||
elementId : "checkinDate",
|
||||
widgetType : "dijit.form.DateTextBox",
|
||||
widgetAttrs : { datePattern : "MM-dd-yyyy", required : true }}));
|
||||
// ]]>
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="span-4">
|
||||
<label for="checkoutDate">Check Out:</label>
|
||||
</div>
|
||||
<div class="span-7 last">
|
||||
<p><input type="text" th:field="*{checkoutDate}" /></p>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.ElementDecoration({
|
||||
elementId : "checkoutDate",
|
||||
widgetType : "dijit.form.DateTextBox",
|
||||
widgetAttrs : { datePattern : "MM-dd-yyyy", required : true }}));
|
||||
// ]]>
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="span-4">
|
||||
<label for="beds">Room Preference:</label>
|
||||
</div>
|
||||
<div class="span-7 last">
|
||||
<p>
|
||||
<select th:field="*{beds}">
|
||||
<option label="One king-size bed" value="1" />
|
||||
<option label="Two double beds" value="2" />
|
||||
<option label="Three beds" value="3" />
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="label span-4">
|
||||
Smoking Preference:
|
||||
</div>
|
||||
<div id="radio" class="span-7 last">
|
||||
<p>
|
||||
<input type="radio" id="smoking" th:field="*{smoking}" value="true" /><label for="smoking">Smoking</label>
|
||||
<fieldset>
|
||||
<legend>Book Hotel</legend>
|
||||
<div>
|
||||
<div class="span-4">
|
||||
<label for="checkinDate">Check In:</label>
|
||||
</div>
|
||||
<div class="span-7 last">
|
||||
<p><input type="text" th:field="*{checkinDate}" /></p>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.ElementDecoration({
|
||||
elementId : "checkinDate",
|
||||
widgetType : "dijit.form.DateTextBox",
|
||||
widgetAttrs : { datePattern : "MM-dd-yyyy", required : true }}));
|
||||
// ]]>
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="span-4">
|
||||
<label for="checkoutDate">Check Out:</label>
|
||||
</div>
|
||||
<div class="span-7 last">
|
||||
<p><input type="text" th:field="*{checkoutDate}" /></p>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.ElementDecoration({
|
||||
elementId : "checkoutDate",
|
||||
widgetType : "dijit.form.DateTextBox",
|
||||
widgetAttrs : { datePattern : "MM-dd-yyyy", required : true }}));
|
||||
// ]]>
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="span-4">
|
||||
<label for="beds">Room Preference:</label>
|
||||
</div>
|
||||
<div class="span-7 last">
|
||||
<p>
|
||||
<select th:field="*{beds}">
|
||||
<option label="One king-size bed" value="1" />
|
||||
<option label="Two double beds" value="2" />
|
||||
<option label="Three beds" value="3" />
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="label span-4">
|
||||
Smoking Preference:
|
||||
</div>
|
||||
<div id="radio" class="span-7 last">
|
||||
<p>
|
||||
<input type="radio" id="smoking" th:field="*{smoking}" value="true" /><label for="smoking">Smoking</label>
|
||||
<input type="radio" id="non-smoking" th:field="*{smoking}" value="false" /><label for="non-smoking">Non Smoking</label>
|
||||
</p>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.ElementDecoration({
|
||||
elementId : 'smoking',
|
||||
widgetType : "dijit.form.RadioButton",
|
||||
widgetModule : "dijit.form.CheckBox",
|
||||
widgetAttrs : { value : "true" }
|
||||
}));
|
||||
Spring.addDecoration(new Spring.ElementDecoration({
|
||||
elementId : 'non-smoking',
|
||||
widgetType : "dijit.form.RadioButton",
|
||||
widgetModule : "dijit.form.CheckBox",
|
||||
widgetAttrs : { value : "false" }
|
||||
}));
|
||||
// ]]>
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="label span-4">
|
||||
Amenities:
|
||||
</div>
|
||||
<div id="amenities" class="span-7 last">
|
||||
<p>
|
||||
</p>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.ElementDecoration({
|
||||
elementId : 'smoking',
|
||||
widgetType : "dijit.form.RadioButton",
|
||||
widgetModule : "dijit.form.CheckBox",
|
||||
widgetAttrs : { value : "true" }
|
||||
}));
|
||||
Spring.addDecoration(new Spring.ElementDecoration({
|
||||
elementId : 'non-smoking',
|
||||
widgetType : "dijit.form.RadioButton",
|
||||
widgetModule : "dijit.form.CheckBox",
|
||||
widgetAttrs : { value : "false" }
|
||||
}));
|
||||
// ]]>
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="label span-4">
|
||||
Amenities:
|
||||
</div>
|
||||
<div id="amenities" class="span-7 last">
|
||||
<p>
|
||||
<input type="checkbox" th:field="*{amenities}" value="OCEAN_VIEW" /><label th:for="${#ids.prev('amenities')}">Ocean View</label>
|
||||
<br />
|
||||
<br />
|
||||
<input type="checkbox" th:field="*{amenities}" value="LATE_CHECKOUT" /><label th:for="${#ids.prev('amenities')}">Late Checkout</label>
|
||||
<br />
|
||||
<br />
|
||||
<input type="checkbox" th:field="*{amenities}" value="MINIBAR" /><label th:for="${#ids.prev('amenities')}">Minibar</label>
|
||||
</p>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
dojo.query("#amenities input[type='checkbox']").forEach(function(element){
|
||||
Spring.addDecoration(new Spring.ElementDecoration({
|
||||
elementId: element.id,
|
||||
widgetType : "dijit.form.CheckBox",
|
||||
widgetAttrs : { checked : element.checked }
|
||||
}));
|
||||
});
|
||||
// ]]>
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="span-4">
|
||||
<label for="creditCard">Credit Card #:</label>
|
||||
</div>
|
||||
<div class="span-7 last">
|
||||
<p><input type="text" th:field="*{creditCard}" /></p>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.ElementDecoration({
|
||||
elementId : "creditCard",
|
||||
widgetType : "dijit.form.ValidationTextBox",
|
||||
widgetAttrs : { required : true, invalidMessage : "A 16-digit credit card number is required.",
|
||||
regExp : "[0-9]{16}" }}));
|
||||
// ]]>
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="span-4">
|
||||
<label for="creditCardName">Credit Card Name:</label>
|
||||
</div>
|
||||
<div class="span-7 last">
|
||||
</p>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
dojo.query("#amenities input[type='checkbox']").forEach(function(element){
|
||||
Spring.addDecoration(new Spring.ElementDecoration({
|
||||
elementId: element.id,
|
||||
widgetType : "dijit.form.CheckBox",
|
||||
widgetAttrs : { checked : element.checked }
|
||||
}));
|
||||
});
|
||||
// ]]>
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="span-4">
|
||||
<label for="creditCard">Credit Card #:</label>
|
||||
</div>
|
||||
<div class="span-7 last">
|
||||
<p><input type="text" th:field="*{creditCard}" /></p>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.ElementDecoration({
|
||||
elementId : "creditCard",
|
||||
widgetType : "dijit.form.ValidationTextBox",
|
||||
widgetAttrs : { required : true, invalidMessage : "A 16-digit credit card number is required.",
|
||||
regExp : "[0-9]{16}" }}));
|
||||
// ]]>
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="span-4">
|
||||
<label for="creditCardName">Credit Card Name:</label>
|
||||
</div>
|
||||
<div class="span-7 last">
|
||||
<p><input type="text" th:field="*{creditCardName}" maxlength="40" /></p>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.ElementDecoration({
|
||||
elementId : "creditCardName",
|
||||
widgetType : "dijit.form.ValidationTextBox",
|
||||
widgetAttrs : { required : true }}));
|
||||
// ]]>
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="span-4">
|
||||
<label for="creditCardExpiryMonth">Expiration Date:</label>
|
||||
</div>
|
||||
<div class="span-7 last">
|
||||
<p>
|
||||
<select th:field="*{creditCardExpiryMonth}">
|
||||
<option value="1">Jan</option>
|
||||
<option value="2">Feb</option>
|
||||
<option value="3">Mar</option>
|
||||
<option value="4">Apr</option>
|
||||
<option value="5">May</option>
|
||||
<option value="6">Jun</option>
|
||||
<option value="7">Jul</option>
|
||||
<option value="8">Aug</option>
|
||||
<option value="9">Sep</option>
|
||||
<option value="10">Oct</option>
|
||||
<option value="11">Nov</option>
|
||||
<option value="12">Dec</option>
|
||||
</select>
|
||||
<select th:field="*{creditCardExpiryYear}">
|
||||
<option value="1">2008</option>
|
||||
<option value="2">2009</option>
|
||||
<option value="3">2010</option>
|
||||
<option value="4">2011</option>
|
||||
<option value="5">2012</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<p>
|
||||
<button type="submit" id="proceed" name="_eventId_proceed">Proceed</button>
|
||||
<button type="submit" name="_eventId_cancel" >Cancel</button>
|
||||
</p>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.ValidateAllDecoration({elementId:'proceed', event:'onclick'}));
|
||||
Spring.addDecoration(new Spring.AjaxEventDecoration({elementId:'proceed',event:'onclick',formId:'booking'}));
|
||||
// ]]>
|
||||
</script>
|
||||
</div>
|
||||
</fieldset>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.ElementDecoration({
|
||||
elementId : "creditCardName",
|
||||
widgetType : "dijit.form.ValidationTextBox",
|
||||
widgetAttrs : { required : true }}));
|
||||
// ]]>
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="span-4">
|
||||
<label for="creditCardExpiryMonth">Expiration Date:</label>
|
||||
</div>
|
||||
<div class="span-7 last">
|
||||
<p>
|
||||
<select th:field="*{creditCardExpiryMonth}">
|
||||
<option value="1">Jan</option>
|
||||
<option value="2">Feb</option>
|
||||
<option value="3">Mar</option>
|
||||
<option value="4">Apr</option>
|
||||
<option value="5">May</option>
|
||||
<option value="6">Jun</option>
|
||||
<option value="7">Jul</option>
|
||||
<option value="8">Aug</option>
|
||||
<option value="9">Sep</option>
|
||||
<option value="10">Oct</option>
|
||||
<option value="11">Nov</option>
|
||||
<option value="12">Dec</option>
|
||||
</select>
|
||||
<select th:field="*{creditCardExpiryYear}">
|
||||
<option value="1">2008</option>
|
||||
<option value="2">2009</option>
|
||||
<option value="3">2010</option>
|
||||
<option value="4">2011</option>
|
||||
<option value="5">2012</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<p>
|
||||
<button type="submit" id="proceed" name="_eventId_proceed">Proceed</button>
|
||||
<button type="submit" name="_eventId_cancel" >Cancel</button>
|
||||
</p>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.ValidateAllDecoration({elementId:'proceed', event:'onclick'}));
|
||||
Spring.addDecoration(new Spring.AjaxEventDecoration({elementId:'proceed',event:'onclick',formId:'booking'}));
|
||||
// ]]>
|
||||
</script>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@@ -51,10 +51,10 @@
|
||||
|
||||
<div id="bookingForm">
|
||||
|
||||
<div class="span-5">
|
||||
<div class="span-5">
|
||||
|
||||
<h3 th:text="${booking.hotel.name}">The Herb Plaza</h3>
|
||||
|
||||
<h3 th:text="${booking.hotel.name}">The Herb Plaza</h3>
|
||||
|
||||
<address th:object="${booking.hotel}">
|
||||
<span th:text="*{address}">Thyme Square, 13</span>
|
||||
<br />
|
||||
@@ -65,64 +65,64 @@
|
||||
<span th:text="*{country}">Earth</span>
|
||||
</address>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="span-12 last">
|
||||
<div class="span-12 last">
|
||||
|
||||
<form id="confirm" action="#" method="post" th:object="${booking}" th:action="${flowExecutionUrl}">
|
||||
<form id="confirm" action="#" method="post" th:object="${booking}" th:action="${flowExecutionUrl}">
|
||||
|
||||
<fieldset>
|
||||
<fieldset>
|
||||
|
||||
<legend>Confirm Booking Details</legend>
|
||||
<legend>Confirm Booking Details</legend>
|
||||
|
||||
<div>
|
||||
<div class="span-3">Check In:</div>
|
||||
<div class="span-8 last">
|
||||
<p th:text="*{checkinDate}">2012-12-21</p>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="span-3">Checkout:</div>
|
||||
<div class="span-8 last">
|
||||
<div>
|
||||
<div class="span-3">Check In:</div>
|
||||
<div class="span-8 last">
|
||||
<p th:text="*{checkinDate}">2012-12-21</p>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="span-3">Checkout:</div>
|
||||
<div class="span-8 last">
|
||||
<p th:text="*{checkoutDate}">2012-12-21</p>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="span-3">Number of Nights:</div>
|
||||
<div class="span-8 last">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="span-3">Number of Nights:</div>
|
||||
<div class="span-8 last">
|
||||
<p th:text="*{nights}">0</p>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="span-3">Total Payment:</div>
|
||||
<div class="span-8 last">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="span-3">Total Payment:</div>
|
||||
<div class="span-8 last">
|
||||
<p th:text="*{total}">400.00</p>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="span-3">Credit Card #:</div>
|
||||
<div class="span-8 last">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="span-3">Credit Card #:</div>
|
||||
<div class="span-8 last">
|
||||
<p th:text="*{creditCard}">1234123412341234</p>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<p>
|
||||
<button type="submit" name="_eventId_confirm">Confirm</button>
|
||||
<button type="submit" name="_eventId_revise" id="revise">Revise</button>
|
||||
<button type="submit" name="_eventId_cancel">Cancel</button>
|
||||
</p>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.AjaxEventDecoration({elementId:'revise',event:'onclick',formId:'confirm'}));
|
||||
// ]]>
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<p>
|
||||
<button type="submit" name="_eventId_confirm">Confirm</button>
|
||||
<button type="submit" name="_eventId_revise" id="revise">Revise</button>
|
||||
<button type="submit" name="_eventId_cancel">Cancel</button>
|
||||
</p>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.AjaxEventDecoration({elementId:'revise',event:'onclick',formId:'confirm'}));
|
||||
// ]]>
|
||||
</script>
|
||||
</div>
|
||||
|
||||
</fieldset>
|
||||
</fieldset>
|
||||
|
||||
</form>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@@ -50,40 +50,40 @@
|
||||
|
||||
<div id="bookings" sec:authorize="hasRole('ROLE_USER')">
|
||||
|
||||
<h2>Current Hotel Bookings</h2>
|
||||
<h2>Current Hotel Bookings</h2>
|
||||
|
||||
<p th:unless="${bookingList}">
|
||||
No bookings found
|
||||
</p>
|
||||
<p th:unless="${bookingList}">
|
||||
No bookings found
|
||||
</p>
|
||||
|
||||
<table class="summary" th:if="${bookingList}">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Address</th>
|
||||
<th>City, State</th>
|
||||
<th>Check in Date</th>
|
||||
<th>Check out Date</th>
|
||||
<th>Confirmation Number</th>
|
||||
<th>Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr th:each="booking : ${bookingList}" th:object="${booking}">
|
||||
<td th:text="*{hotel.name}">The Herb Plaza</td>
|
||||
<td th:text="*{hotel.address}">Thyme Square, 13</td>
|
||||
<td th:text="*{hotel.city} + ', ' + *{hotel.state}">Icetown, North Pole</td>
|
||||
<td th:text="*{checkinDate}">2012-12-21</td>
|
||||
<td th:text="*{checkoutDate}">2012-12-21</td>
|
||||
<td th:text="*{id}">1</td>
|
||||
<td>
|
||||
<table class="summary" th:if="${bookingList}">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Address</th>
|
||||
<th>City, State</th>
|
||||
<th>Check in Date</th>
|
||||
<th>Check out Date</th>
|
||||
<th>Confirmation Number</th>
|
||||
<th>Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr th:each="booking : ${bookingList}" th:object="${booking}">
|
||||
<td th:text="*{hotel.name}">The Herb Plaza</td>
|
||||
<td th:text="*{hotel.address}">Thyme Square, 13</td>
|
||||
<td th:text="*{hotel.city} + ', ' + *{hotel.state}">Icetown, North Pole</td>
|
||||
<td th:text="*{checkinDate}">2012-12-21</td>
|
||||
<td th:text="*{checkoutDate}">2012-12-21</td>
|
||||
<td th:text="*{id}">1</td>
|
||||
<td>
|
||||
<form action="#" th:action="@{'/bookings/' + *{id}}" th:method="'delete'">
|
||||
<button type="submit">Cancel</button>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@@ -52,83 +52,83 @@
|
||||
<h1>Hotel Results</h1>
|
||||
|
||||
<p>
|
||||
<a id="changeSearchLink" href="#"
|
||||
<a id="changeSearchLink" href="#"
|
||||
th:href="@{hotels/search(searchString=${searchCriteria.searchString},pageSize=${searchCriteria.pageSize})}">Change Search</a>
|
||||
<script type="text/javascript">
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.AjaxEventDecoration({
|
||||
elementId: "changeSearchLink",
|
||||
event: "onclick",
|
||||
popup: true,
|
||||
params: {fragments: "searchForm"}
|
||||
}));
|
||||
// ]]>
|
||||
</script>
|
||||
Spring.addDecoration(new Spring.AjaxEventDecoration({
|
||||
elementId: "changeSearchLink",
|
||||
event: "onclick",
|
||||
popup: true,
|
||||
params: {fragments: "searchForm"}
|
||||
}));
|
||||
// ]]>
|
||||
</script>
|
||||
</p>
|
||||
|
||||
<div id="hotelResults">
|
||||
|
||||
<div th:if="${hotelList}">
|
||||
|
||||
<table class="summary">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Address</th>
|
||||
<th>City, State</th>
|
||||
<th>Zip</th>
|
||||
<th>Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr th:each="hotel : ${hotelList}">
|
||||
<td th:text="${hotel.name}">The Herb Plaza</td>
|
||||
<td th:text="${hotel.address}">Thyme Square, 13</td>
|
||||
<td th:text="${hotel.city} + ', ' + ${hotel.state} + ', ' + ${hotel.country}">Icetown, North Pole, Earth</td>
|
||||
<td th:text="${hotel.zip}">0W</td>
|
||||
<td><a href="#" th:href="@{'hotels/' + ${hotel.id}}">View Hotel</a></td>
|
||||
</tr>
|
||||
<tr th:unless="${hotelList}">
|
||||
<td colspan="5">No hotels found</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table class="summary">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Address</th>
|
||||
<th>City, State</th>
|
||||
<th>Zip</th>
|
||||
<th>Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr th:each="hotel : ${hotelList}">
|
||||
<td th:text="${hotel.name}">The Herb Plaza</td>
|
||||
<td th:text="${hotel.address}">Thyme Square, 13</td>
|
||||
<td th:text="${hotel.city} + ', ' + ${hotel.state} + ', ' + ${hotel.country}">Icetown, North Pole, Earth</td>
|
||||
<td th:text="${hotel.zip}">0W</td>
|
||||
<td><a href="#" th:href="@{'hotels/' + ${hotel.id}}">View Hotel</a></td>
|
||||
</tr>
|
||||
<tr th:unless="${hotelList}">
|
||||
<td colspan="5">No hotels found</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="buttonGroup">
|
||||
<div class="span-3">
|
||||
<div th:if="${searchCriteria.page > 0}">
|
||||
<div class="buttonGroup">
|
||||
<div class="span-3">
|
||||
<div th:if="${searchCriteria.page > 0}">
|
||||
<a id="prevResultsLink" href="#"
|
||||
th:href="@{hotels(searchString=${searchCriteria.searchString},pageSize=${searchCriteria.pageSize},page=${searchCriteria.page - 1})}">Previous Results</a>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.AjaxEventDecoration({
|
||||
elementId: "prevResultsLink",
|
||||
event: "onclick",
|
||||
params: {fragments: "body"}
|
||||
}));
|
||||
// ]]>
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="span-3 append-12 last">
|
||||
<div th:if="${hotelList} and ${hotelList.size() == searchCriteria.pageSize}">
|
||||
<a id="moreResultsLink" href="#"
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.AjaxEventDecoration({
|
||||
elementId: "prevResultsLink",
|
||||
event: "onclick",
|
||||
params: {fragments: "body"}
|
||||
}));
|
||||
// ]]>
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="span-3 append-12 last">
|
||||
<div th:if="${hotelList} and ${hotelList.size() == searchCriteria.pageSize}">
|
||||
<a id="moreResultsLink" href="#"
|
||||
th:href="@{hotels(searchString=${searchCriteria.searchString},pageSize=${searchCriteria.pageSize},page=${searchCriteria.page + 1})}">More Results</a>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.AjaxEventDecoration({
|
||||
elementId: "moreResultsLink",
|
||||
event: "onclick",
|
||||
params: {fragments: "body"}
|
||||
}));
|
||||
// ]]>
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.AjaxEventDecoration({
|
||||
elementId: "moreResultsLink",
|
||||
event: "onclick",
|
||||
params: {fragments: "body"}
|
||||
}));
|
||||
// ]]>
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
@@ -56,32 +56,32 @@
|
||||
<li th:each="err : ${#fields.errors('*')}" th:text="${err}">Input is incorrect</li>
|
||||
</ul>
|
||||
|
||||
<fieldset>
|
||||
<div class="span-8">
|
||||
<label for="searchString">Search String:</label>
|
||||
<input type="text" id="searchString" th:field="*{searchString}" />
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.ElementDecoration({
|
||||
elementId : "searchString",
|
||||
widgetType : "dijit.form.ValidationTextBox",
|
||||
widgetAttrs : { promptMessage : "Search hotels by name, address, city, or zip." }}));
|
||||
// ]]>
|
||||
</script>
|
||||
</div>
|
||||
<div class="span-6">
|
||||
<div>
|
||||
<label for="pageSize">Maximum results:</label>
|
||||
<select id="pageSize" th:field="*{pageSize}">
|
||||
<option label="5" value="5" />
|
||||
<option label="10" value="10" />
|
||||
<option label="20" value="20" />
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="span-3 last">
|
||||
<button type="submit">Find Hotels</button>
|
||||
</div>
|
||||
<fieldset>
|
||||
<div class="span-8">
|
||||
<label for="searchString">Search String:</label>
|
||||
<input type="text" id="searchString" th:field="*{searchString}" />
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.ElementDecoration({
|
||||
elementId : "searchString",
|
||||
widgetType : "dijit.form.ValidationTextBox",
|
||||
widgetAttrs : { promptMessage : "Search hotels by name, address, city, or zip." }}));
|
||||
// ]]>
|
||||
</script>
|
||||
</div>
|
||||
<div class="span-6">
|
||||
<div>
|
||||
<label for="pageSize">Maximum results:</label>
|
||||
<select id="pageSize" th:field="*{pageSize}">
|
||||
<option label="5" value="5" />
|
||||
<option label="10" value="10" />
|
||||
<option label="20" value="20" />
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="span-3 last">
|
||||
<button type="submit">Find Hotels</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
</form>
|
||||
|
||||
@@ -52,23 +52,23 @@
|
||||
<h1 th:text="${hotel.name}">The Herb Plaza</h1>
|
||||
|
||||
<address th:object="${hotel}">
|
||||
<span th:text="*{address}">Thyme Square, 13</span>
|
||||
<br />
|
||||
<span th:text="*{city}">Icetown</span>,
|
||||
<span th:text="*{address}">Thyme Square, 13</span>
|
||||
<br />
|
||||
<span th:text="*{city}">Icetown</span>,
|
||||
<span th:text="*{state}">North Pole</span>,
|
||||
<span th:text="*{zip}">0W</span>
|
||||
<br />
|
||||
<span th:text="*{country}">Earth</span>
|
||||
<br />
|
||||
<span th:text="*{country}">Earth</span>
|
||||
</address>
|
||||
|
||||
<form action="#" th:action="@{/hotels/booking(mode='embedded')}" method="get">
|
||||
<p>
|
||||
Nightly Rate: <span th:text="${hotel.price}">4,300</span>
|
||||
</p>
|
||||
<input type="hidden" name="hotelId" th:value="${hotel.id}" />
|
||||
<div>
|
||||
<button type="submit">Book Hotel</button>
|
||||
</div>
|
||||
<p>
|
||||
Nightly Rate: <span th:text="${hotel.price}">4,300</span>
|
||||
</p>
|
||||
<input type="hidden" name="hotelId" th:value="${hotel.id}" />
|
||||
<div>
|
||||
<button type="submit">Book Hotel</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
@@ -48,33 +48,33 @@
|
||||
<body tiles:fragment="content">
|
||||
|
||||
<div>
|
||||
<h1>Welcome to Spring Travel</h1>
|
||||
<p>
|
||||
This sample demonstrates how to use Spring MVC and Spring Web Flow together with JavaServerPages (JSP) and Tiles.
|
||||
</p>
|
||||
<hr />
|
||||
<p>
|
||||
The key features illustrated in this sample include:
|
||||
</p>
|
||||
<ul>
|
||||
<li>A declarative navigation model enabling full browser button support and dynamic navigation rules</li>
|
||||
<li>A fine-grained state management model, including support for ConversationScope and ViewScope</li>
|
||||
<li>Modularization of web application functionality by domain use case, illustrating project structure best-practices</li>
|
||||
<li>Spring Expression Language (SpEL) integration</li>
|
||||
<li>Spring 3 formatting annotations @DateTimeFormat, @NumberFormat</li>
|
||||
<li>Spring MVC custom namespace</li>
|
||||
<li>Spring Security integration</li>
|
||||
<li>Annotated POJO @Controllers for implementing RESTful user interactions.</li>
|
||||
<li>Declarative page authoring with JSP, JSTL, and Spring MVC's form tag library</li>
|
||||
<li>Page layout and composition with Apache Tiles</li>
|
||||
<li>A JavaScript API for decorating HTML elements with behaviors such as Ajax, validation, and effects.</li>
|
||||
<li>A grid layout with Blueprint CSS</li>
|
||||
<li>Exception handling support across all layers of the application</li>
|
||||
<li>SpringSource Tool Suite integration, with support for graphical flow modeling and visualization</li>
|
||||
</ul>
|
||||
<p>
|
||||
<a href="hotels/search.html" th:href="@{/hotels/search}">Start your Spring Travel experience</a>
|
||||
</p>
|
||||
<h1>Welcome to Spring Travel</h1>
|
||||
<p>
|
||||
This sample demonstrates how to use Spring MVC and Spring Web Flow together with JavaServerPages (JSP) and Tiles.
|
||||
</p>
|
||||
<hr />
|
||||
<p>
|
||||
The key features illustrated in this sample include:
|
||||
</p>
|
||||
<ul>
|
||||
<li>A declarative navigation model enabling full browser button support and dynamic navigation rules</li>
|
||||
<li>A fine-grained state management model, including support for ConversationScope and ViewScope</li>
|
||||
<li>Modularization of web application functionality by domain use case, illustrating project structure best-practices</li>
|
||||
<li>Spring Expression Language (SpEL) integration</li>
|
||||
<li>Spring 3 formatting annotations @DateTimeFormat, @NumberFormat</li>
|
||||
<li>Spring MVC custom namespace</li>
|
||||
<li>Spring Security integration</li>
|
||||
<li>Annotated POJO @Controllers for implementing RESTful user interactions.</li>
|
||||
<li>Declarative page authoring with JSP, JSTL, and Spring MVC's form tag library</li>
|
||||
<li>Page layout and composition with Apache Tiles</li>
|
||||
<li>A JavaScript API for decorating HTML elements with behaviors such as Ajax, validation, and effects.</li>
|
||||
<li>A grid layout with Blueprint CSS</li>
|
||||
<li>Exception handling support across all layers of the application</li>
|
||||
<li>SpringSource Tool Suite integration, with support for graphical flow modeling and visualization</li>
|
||||
</ul>
|
||||
<p>
|
||||
<a href="hotels/search.html" th:href="@{/hotels/search}">Start your Spring Travel experience</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@@ -8,23 +8,23 @@
|
||||
<head>
|
||||
|
||||
<title>Spring Travel: Spring MVC and Web Flow Reference Application</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
|
||||
<link rel="stylesheet" type="text/css" media="screen, projection"
|
||||
<link rel="stylesheet" type="text/css" media="screen, projection"
|
||||
href="../../styles/blueprint/screen.css"
|
||||
th:href="@{/resources/styles/blueprint/screen.css}" />
|
||||
|
||||
<link rel="stylesheet" type="text/css" media="print"
|
||||
<link rel="stylesheet" type="text/css" media="print"
|
||||
href="../../styles/blueprint/print.css"
|
||||
th:href="@{/resources/styles/blueprint/print.css}" />
|
||||
|
||||
<!--[if lt IE 8]>
|
||||
<link rel="stylesheet" type="text/css" media="screen, projection"
|
||||
<!--[if lt IE 8]>
|
||||
<link rel="stylesheet" type="text/css" media="screen, projection"
|
||||
href="../../styles/blueprint/ie.css"
|
||||
th:href="@{/resources/styles/blueprint/ie.css}" />
|
||||
<![endif]-->
|
||||
<![endif]-->
|
||||
|
||||
<link rel="stylesheet" type="text/css" media="screen"
|
||||
<link rel="stylesheet" type="text/css" media="screen"
|
||||
href="../../styles/booking.css"
|
||||
th:href="@{/resources/styles/booking.css}" />
|
||||
|
||||
@@ -45,39 +45,39 @@
|
||||
|
||||
<div id="page" class="container">
|
||||
|
||||
<div id="header">
|
||||
<div id="topbar">
|
||||
<p sec:authorize="hasRole('ROLE_USER')" th:if="${#authentication}">
|
||||
Welcome, <span sec:authentication="name">Dear User</span> |
|
||||
<a href="#" th:href="@{/logout}">Logout</a>
|
||||
</p>
|
||||
<p sec:authorize="hasRole('ROLE_ANONYMOUS')">
|
||||
<a href="#" th:href="@{/login}">Login</a>
|
||||
</p>
|
||||
</div>
|
||||
<div id="logo">
|
||||
<p>
|
||||
<a href="#" th:href="@{/}">
|
||||
<img src="../../images/header.jpg" th:src="@{/resources/images/header.jpg}" alt="Spring Travel" />
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="header">
|
||||
<div id="topbar">
|
||||
<p sec:authorize="hasRole('ROLE_USER')" th:if="${#authentication}">
|
||||
Welcome, <span sec:authentication="name">Dear User</span> |
|
||||
<a href="#" th:href="@{/logout}">Logout</a>
|
||||
</p>
|
||||
<p sec:authorize="hasRole('ROLE_ANONYMOUS')">
|
||||
<a href="#" th:href="@{/login}">Login</a>
|
||||
</p>
|
||||
</div>
|
||||
<div id="logo">
|
||||
<p>
|
||||
<a href="#" th:href="@{/}">
|
||||
<img src="../../images/header.jpg" th:src="@{/resources/images/header.jpg}" alt="Spring Travel" />
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="content">
|
||||
<div id="local" class="span-6">
|
||||
<p>
|
||||
<a href="http://www.thespringexperience.com">
|
||||
<img src="../../images/diplomat.jpg" th:src="@{/resources/images/diplomat.jpg}" alt="generic hotel" />
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<a href="http://www.thespringexperience.com">
|
||||
<img src="../../images/springone2gx.jpeg" th:src="@{/resources/images/springone2gx.jpeg}" alt="SpringOne 2GX" />
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
<div id="main" class="span-18 last" tiles:include="body">
|
||||
<div id="content">
|
||||
<div id="local" class="span-6">
|
||||
<p>
|
||||
<a href="http://www.thespringexperience.com">
|
||||
<img src="../../images/diplomat.jpg" th:src="@{/resources/images/diplomat.jpg}" alt="generic hotel" />
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<a href="http://www.thespringexperience.com">
|
||||
<img src="../../images/springone2gx.jpeg" th:src="@{/resources/images/springone2gx.jpeg}" alt="SpringOne 2GX" />
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
<div id="main" class="span-18 last" tiles:include="body">
|
||||
|
||||
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
|
||||
<!-- At runtime, the body of this <div> will be substituted by -->
|
||||
@@ -87,16 +87,16 @@
|
||||
|
||||
BODY PAGE GOES HERE!
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr />
|
||||
<hr />
|
||||
|
||||
<div id="footer">
|
||||
<a href="http://www.springframework.org">
|
||||
<img src="../../images/powered-by-spring.png" th:src="@{/resources/images/powered-by-spring.png}" alt="Powered by Spring" />
|
||||
</a>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<a href="http://www.springframework.org">
|
||||
<img src="../../images/powered-by-spring.png" th:src="@{/resources/images/powered-by-spring.png}" alt="Powered by Spring" />
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
|
||||
@@ -49,13 +49,13 @@
|
||||
|
||||
|
||||
<div class="span-5">
|
||||
<p>Valid username/passwords are:</p>
|
||||
<ul>
|
||||
<li>keith/melbourne</li>
|
||||
<li>erwin/leuven</li>
|
||||
<li>jeremy/atlanta</li>
|
||||
<li>scott/rochester</li>
|
||||
</ul>
|
||||
<p>Valid username/passwords are:</p>
|
||||
<ul>
|
||||
<li>keith/melbourne</li>
|
||||
<li>erwin/leuven</li>
|
||||
<li>jeremy/atlanta</li>
|
||||
<li>scott/rochester</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="span-10 append-2 last"
|
||||
@@ -63,72 +63,72 @@
|
||||
th:with="lastUsernameKey=${T(org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter).SPRING_SECURITY_LAST_USERNAME_KEY},
|
||||
lastExceptionKey=${T(org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter).SPRING_SECURITY_LAST_EXCEPTION_KEY}">
|
||||
|
||||
<div class="error" th:if="${param.login_error}">
|
||||
Your login attempt was not successful, try again.<br /><br />
|
||||
Reason: <span th:text="${session[__${lastExceptionKey}__].message}">Invalid password</span>
|
||||
</div>
|
||||
<div class="error" th:if="${param.login_error}">
|
||||
Your login attempt was not successful, try again.<br /><br />
|
||||
Reason: <span th:text="${session[__${lastExceptionKey}__].message}">Invalid password</span>
|
||||
</div>
|
||||
|
||||
<form name="f" action="#" th:action="@{/loginProcess}" method="post">
|
||||
<form name="f" action="#" th:action="@{/loginProcess}" method="post">
|
||||
|
||||
<fieldset>
|
||||
<fieldset>
|
||||
|
||||
<legend>Login Information</legend>
|
||||
<legend>Login Information</legend>
|
||||
|
||||
<p>
|
||||
<label for="j_username">User:</label>
|
||||
<br />
|
||||
<input type="text" name="j_username" id="j_username"
|
||||
<p>
|
||||
<label for="j_username">User:</label>
|
||||
<br />
|
||||
<input type="text" name="j_username" id="j_username"
|
||||
th:value="${param.login_error} ? ${session[__${lastUsernameKey}__]} : ''" />
|
||||
</p>
|
||||
</p>
|
||||
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.ElementDecoration({
|
||||
elementId : "j_username",
|
||||
widgetType : "dijit.form.ValidationTextBox",
|
||||
widgetAttrs : { required : true }}));
|
||||
// ]]>
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.ElementDecoration({
|
||||
elementId : "j_username",
|
||||
widgetType : "dijit.form.ValidationTextBox",
|
||||
widgetAttrs : { required : true }}));
|
||||
// ]]>
|
||||
</script>
|
||||
|
||||
<p>
|
||||
<label for="j_password">Password:</label>
|
||||
<br />
|
||||
<input type="password" name="j_password" id="j_password" />
|
||||
</p>
|
||||
<p>
|
||||
<label for="j_password">Password:</label>
|
||||
<br />
|
||||
<input type="password" name="j_password" id="j_password" />
|
||||
</p>
|
||||
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.ElementDecoration({
|
||||
elementId : "j_password",
|
||||
widgetType : "dijit.form.ValidationTextBox",
|
||||
widgetAttrs : { required : true}}));
|
||||
// ]]>
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.ElementDecoration({
|
||||
elementId : "j_password",
|
||||
widgetType : "dijit.form.ValidationTextBox",
|
||||
widgetAttrs : { required : true}}));
|
||||
// ]]>
|
||||
</script>
|
||||
|
||||
<p>
|
||||
<input type="checkbox" name="_spring_security_remember_me" id="remember_me" />
|
||||
<label for="remember_me">Don't ask for my password for two weeks:</label>
|
||||
</p>
|
||||
<p>
|
||||
<input type="checkbox" name="_spring_security_remember_me" id="remember_me" />
|
||||
<label for="remember_me">Don't ask for my password for two weeks:</label>
|
||||
</p>
|
||||
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.ElementDecoration({
|
||||
elementId : "remember_me",
|
||||
widgetType : "dijit.form.CheckBox"}));
|
||||
// ]]>
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
Spring.addDecoration(new Spring.ElementDecoration({
|
||||
elementId : "remember_me",
|
||||
widgetType : "dijit.form.CheckBox"}));
|
||||
// ]]>
|
||||
</script>
|
||||
|
||||
<p>
|
||||
<button id="submit" type="submit">Login</button>
|
||||
<script type="text/javascript">
|
||||
Spring.addDecoration(
|
||||
new Spring.ValidateAllDecoration({event : 'onclick', elementId : 'submit'}));
|
||||
</script>
|
||||
</p>
|
||||
<p>
|
||||
<button id="submit" type="submit">Login</button>
|
||||
<script type="text/javascript">
|
||||
Spring.addDecoration(
|
||||
new Spring.ValidateAllDecoration({event : 'onclick', elementId : 'submit'}));
|
||||
</script>
|
||||
</p>
|
||||
|
||||
</fieldset>
|
||||
</fieldset>
|
||||
|
||||
</form>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@@ -49,10 +49,10 @@
|
||||
|
||||
|
||||
<div>
|
||||
<h1>Logout</h1>
|
||||
<p>You have successfully logged out.</p>
|
||||
<hr />
|
||||
<p><a href="hotels/searchForm.html" th:href="@{/hotels/search}">Continue</a></p>
|
||||
<h1>Logout</h1>
|
||||
<p>You have successfully logged out.</p>
|
||||
<hr />
|
||||
<p><a href="hotels/searchForm.html" th:href="@{/hotels/search}">Continue</a></p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user