Adding sort functionality on the reviewHotels view to exercise SWF-692 and SWF-700

This commit is contained in:
Jeremy Grelle
2008-05-23 15:28:16 +00:00
parent 9b51692b7f
commit ebd9e5807a
4 changed files with 30 additions and 4 deletions

View File

@@ -43,8 +43,9 @@ public class JpaBookingService implements BookingService {
String pattern = getSearchPattern(criteria);
return em.createQuery(
"select h from Hotel h where lower(h.name) like " + pattern + " or lower(h.city) like " + pattern
+ " or lower(h.zip) like " + pattern + " or lower(h.address) like " + pattern).setMaxResults(
criteria.getPageSize()).setFirstResult(criteria.getPage() * criteria.getPageSize()).getResultList();
+ " or lower(h.zip) like " + pattern + " or lower(h.address) like " + pattern + " order by h."
+ criteria.getSortBy()).setMaxResults(criteria.getPageSize()).setFirstResult(
criteria.getPage() * criteria.getPageSize()).getResultList();
}
@Transactional(readOnly = true)

View File

@@ -24,6 +24,16 @@ public class SearchCriteria implements Serializable {
*/
private int page;
private String sortBy = "name";
public String getSortBy() {
return sortBy;
}
public void setSortBy(String sortBy) {
this.sortBy = sortBy;
}
public String getSearchString() {
return searchString;
}
@@ -58,6 +68,7 @@ public class SearchCriteria implements Serializable {
public void resetPage() {
page = 0;
sortBy = "name";
}
public String toString() {

View File

@@ -22,6 +22,10 @@
<on-render>
<evaluate expression="bookingService.findHotels(searchCriteria)" result="viewScope.hotels" result-type="dataModel" />
</on-render>
<transition on="sort">
<set name="searchCriteria.sortBy" value="requestParameters.sortBy"/>
<render fragments="hotels:searchResultsFragment" />
</transition>
<transition on="previous">
<evaluate expression="searchCriteria.previousPage()" />
<render fragments="hotels:searchResultsFragment" />

View File

@@ -19,7 +19,12 @@
<h:outputText id="noHotelsText" value="No Hotels Found" rendered="#{hotels.rowCount == 0}"/>
<h:dataTable id="hotels" styleClass="summary" value="#{hotels}" var="h" rendered="#{hotels.rowCount > 0}">
<h:column>
<f:facet name="header">Name</f:facet>
<f:facet name="header">
<!-- @TODO - Ajax won't work here until JSF RI fixes bug in UIData.invokeOnComponent - scheduled for 1.2_09 -->
<sf:commandLink id="sortByNameLink" ajaxEnabled="false" action="sort" value="Name">
<f:param name="sortBy" value="name" />
</sf:commandLink>
</f:facet>
#{h.name}
</h:column>
<h:column>
@@ -27,7 +32,12 @@
#{h.address}
</h:column>
<h:column>
<f:facet name="header">City, State</f:facet>
<f:facet name="header">
<!-- @TODO - Ajax won't work here until JSF RI fixes bug in UIData.invokeOnComponent - scheduled for 1.2_09 -->
<sf:commandLink id="sortByCity" ajaxEnabled="false" action="sort" value="City, State" >
<f:param name="sortBy" value="city" />
</sf:commandLink>
</f:facet>
#{h.city}, #{h.state}, #{h.country}
</h:column>
<h:column>