Ulrich Stärk schrieb:
it might be the right time now to post your complete page class and page
template before we start doing wild guesses...
Here you are:
Search2.java:
-----------------------------------------------------------------------
public abstract class Search2
extends BaseBookingPage
implements PageBeginRenderListener {
@InitialValue("ognl:true") @Persist
public abstract boolean isSearchForHotels();
public abstract void setSearchForHotels(boolean doIt);
@InitialValue("ognl:true") @Persist
public abstract boolean isSearchForHolidayHomes();
public abstract void setSearchForHolidayHomes(boolean doIt);
@Component(
type = "Form",
id = "bookingForm",
bindings = {
"listener=ognl:listeners.submitForm",
"delegate=ognl:beans.delegate",
"clientValidationEnabled=ognl:false" })
public abstract IComponent getBookingForm();
/* (non-Javadoc)
* @see
org.apache.tapestry.event.PageBeginRenderListener#pageBeginRender(org.apache.tapestry.event.PageEvent)
*/
public void pageBeginRender(PageEvent arg0) {
assertReservationNotLocked();
initializeArrivelDate();
initializeDepartureDate();
// if (passengerModel == null) {
// passengerModel = new IntegerPropertySelectionModel(1, 8);
// }
}
private void initializeArrivelDate() {
if(getArrivalDate() == null) {
Date arrival = DateUtil.addDays(DateUtil.getTodaysMidnight(),
getManager().getReservationStartDateOffsetDays());
setArrivalDate(arrival);
}
}
private void initializeDepartureDate() {
if(getDepartureDate() == null) {
Date departure =
DateUtil.addDays(DateUtil.getTodaysMidnight(),
getManager().getReservationStartDateOffsetDays() + 1);
setDepartureDate(departure);
}
}
/**
* Listener-Methode: Formular-Übermittlung: ReservationQuery-Objekt mit
* den Eingabedaten des Kunden befüllen.
* <p>
* Noch mache ich die Validierung hier von Hand.
*
*/
public IPage submitForm() {
assertReservationNotLocked();
ReservationQuery query = getReservationQuery();
// An- und Abreise
query.setArrivalDate(getArrivalDate());
query.setDepartureDate(getDepartureDate());
calculateNights(query);
query.setLocationSearchTerm(getLocationSearchTerm());
query.setPassengers(getPassengerQty());
// Art der Objekte, die gesucht werden
query.setSearchForHotels(isSearchForHotels());
query.setSearchForHolidayHomes(isSearchForHolidayHomes());
// Validierung ausgelagert
IValidationDelegate delegate = getDelegate();
validate(delegate);
if(isInError()) {
return null;
}
return getNextPage().startNewSearch();
}
protected void calculateNights(ReservationQuery query) {
DateTime arrival = new DateTime(query.getArrivalDate());
DateTime departure = new DateTime(query.getDepartureDate());
Days days = Days.daysBetween(arrival, departure);
int nights = days.getDays();
query.setNights(nights);
}
/**
* Manuelles Validieren der Eingabedaten
*/
protected void validate(IValidationDelegate delegate) {
int days = getManager().getReservationStartDateOffsetDays();
if(getArrivalDate().before(DateUtil.daysFromToday(days - 1))) {
// arrivalDate ist zu früh
delegate.record(getArrivalDatePicker(),
"Buchungen m\u00fcssen mindestens " + days
+ " Tage in der Zukunft liegen");
}
if(getReservationQuery().getNights() == null ||
getReservationQuery().getNights() <= 0 ) {
delegate.record(getArrivalDatePicker(),
"Bitte die Daten für An- und Abreise
\u00fcberpr\u00fcfen");
}
if(isSearchForHotels() == false && isSearchForHolidayHomes() ==
false) {
setErrorMessage("Bitte w\u00e4hlen Sie aus, welche
Unterkunftsarten " +
"gesucht werden sollen");
}
}
/** Anzahl der Passagiere */
public IPropertySelectionModel passengerModel = new
IntegerPropertySelectionModel(1, 8);
/** Datum der Ankunft */
@Persist
public abstract Date getArrivalDate();
public abstract void setArrivalDate(Date arrivalDate);
/** Datum der Abreise */
@Persist
public abstract Date getDepartureDate();
public abstract void setDepartureDate(Date departureDate);
/** Anzahl der mitreisenden Passagiere */
@Persist
public abstract Integer getPassengerQty();
/** Suchbegriff für die Suche nach einer Location */
@Persist
public abstract String getLocationSearchTerm();
public abstract void setLocationSearchTerm(String term);
@InjectPage("booking/List")
public abstract de.net22.oos.web.pages.booking.List getNextPage();
/**
* Tapestry-Komponente: Formularfeld Ankunft
*/
@Component(
bindings = {
"value=ognl:arrivalDate",
"translator=translator:date,pattern=dd.MM.yyyy",
"validators=validators:required"})
public abstract DatePicker getArrivalDatePicker();
/**
* Tapestry-Komponente: Formularfeld Ankunft
*/
@Component(
bindings = {
"value=ognl:departureDate",
"translator=translator:date,pattern=dd.MM.yyyy",
"validators=validators:required"})
public abstract DatePicker getDepartureDatePicker();
@Component(
type = "PropertySelection",
bindings = {
"model=ognl:passengerModel",
"value=ognl:passengerQty",
"validators=validators:required,min=1" })
public abstract IFormComponent getPassengerQtySelection();
}
Search2.html:
-----------------------------------------------------------------------
<span jwcid="@PublicBorder">
<form jwcid="bookingForm">
<table width="100%" border="0">
<tr>
<td width="20"> </td>
<td><span> </span></td>
</tr>
<tr>
<td width="20"></td>
<td>
<table width="100" border="0">
<tr>
<td valign="bottom"><img src="../images/top.gif"
width="500"
height="30"></td>
</tr>
<tr>
<td>
<table width="500" border="1" cellpadding="3"
cellspacing="0"
bordercolor="#000000" bgcolor="#CCCCCC">
<tr>
<td bgcolor="#FFFFFF">
<span jwcid="@cf:ShowValidationError"
delegate="ognl:beans.delegate" />
<p class="TextNormal">
Bitte geben Sie den Zielort,
das Anreisedatum und die
Aufenthaltsdauer an.
</p>
<table width="100%" bgcolor="#FFFFCC"
class="formField">
<tr>
<td class="formFieldLabel"
nowrap="nowrap">Suche nach:</td>
<td class="formField"
nowrap="nowrap" valign="top">
<table width="100%" border="0"
cellspacing="0" cellpadding="0">
<tr>
<td width="87">
<input
jwcid="[EMAIL PROTECTED]"
displayName="literal:Hotels"
value="ognl:searchForHotels"/>
<label jwcid="@FieldLabel"
field="component:doHotelSearchCheckbox">Hotels</label>
</td>
<td width="213">
<input
jwcid="[EMAIL PROTECTED]"
displayName="literal:Ferienhäuser/wohnungen"
value="ognl:page.searchForHolidayHomes"/>
<label jwcid="@FieldLabel"
field="component:doHolidayHomeSearchCheckbox">Ferienhäuser/wohnungen</label>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="formFieldLabel"
nowrap="nowrap"><label
jwcid="@FieldLabel" field="component:locationSelection">Ort /
Region</label></td>
<td class="formField" nowrap="nowrap"
width="300" valign="top">
<input jwcid="[EMAIL
PROTECTED]"
displayName="literal:Ort / Region"
value="ognl:page.locationSearchTerm"
validators="validators:required[Bitte geben Sie den gewünschten
Ort oder die Region an],minLength=2[Bitte geben Sie den gewünschten Ort
oder die Region an]" /></td>
</tr>
<tr>
<td
class="formFieldLabel"><label jwcid="@FieldLabel"
field="component:passengerQtySelection">BlaBlubb</label></td>
<td
class="formField"><input jwcid="passengerQtySelection"
displayName="literal:Personenanzahl" /></td>
</tr>
<tr>
<td nowrap="nowrap"
class="formFieldLabel"><label
jwcid="@FieldLabel"
field="component:arrivalDatePicker">Ankunft</label></td>
<td width="300" valign="top" nowrap="nowrap"
class="formField"><input
jwcid="arrivalDatePicker" displayName="literal:Tag der Ankunft"
/></td>
</tr>
<tr>
<td class="formFieldLabel"
nowrap="nowrap"><label
jwcid="@FieldLabel"
field="component:departureDatePicker">Abreise</label></td>
<td class="formField" nowrap="nowrap" width="300"
valign="top"><input
jwcid="departureDatePicker"
displayName="literal:Tag der Abreise" /></td>
</tr>
</table>
<div align="right">
<input jwcid="@ImageSubmit"
type="image"
image="asset:proceedButton"
value="weiter"
name="weiter"
class="formButton"
/></div>
</td>
</tr>
<tr>
<td bgcolor="#FFFFFF">
<div align="center"><img
src="../images/test.jpg"
alt="Gute Reise" width="450"
height="200"></div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="20"> </td>
<td> </td>
</tr>
</table>
</form>
</span>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]