From f0b00da185b9e1e232c2e528132ebb457e011ed9 Mon Sep 17 00:00:00 2001
From: TejasM <tejasmehta0@gmail.com>
Date: Mon, 27 May 2013 14:28:24 -0400
Subject: [PATCH] Select Tag to validate pet type

---
 .../samples/petclinic/web/PetValidator.java   |  2 ++
 .../jsp/pets/createOrUpdatePetForm.jsp        |  3 +--
 src/main/webapp/WEB-INF/tags/selectField.tag  | 23 +++++++++++++++++++
 3 files changed, 26 insertions(+), 2 deletions(-)
 create mode 100644 src/main/webapp/WEB-INF/tags/selectField.tag

diff --git a/src/main/java/org/springframework/samples/petclinic/web/PetValidator.java b/src/main/java/org/springframework/samples/petclinic/web/PetValidator.java
index 7068dd87..b47d0278 100644
--- a/src/main/java/org/springframework/samples/petclinic/web/PetValidator.java
+++ b/src/main/java/org/springframework/samples/petclinic/web/PetValidator.java
@@ -33,6 +33,8 @@ public class PetValidator {
             errors.rejectValue("name", "required", "required");
         } else if (pet.isNew() && pet.getOwner().getPet(name, true) != null) {
             errors.rejectValue("name", "duplicate", "already exists");
+        } else if (pet.isNew() && pet.getType() == null) {
+            errors.rejectValue("type", "required", "required");
         }
     }
 
diff --git a/src/main/webapp/WEB-INF/jsp/pets/createOrUpdatePetForm.jsp b/src/main/webapp/WEB-INF/jsp/pets/createOrUpdatePetForm.jsp
index ee9c0a91..6a740609 100644
--- a/src/main/webapp/WEB-INF/jsp/pets/createOrUpdatePetForm.jsp
+++ b/src/main/webapp/WEB-INF/jsp/pets/createOrUpdatePetForm.jsp
@@ -42,8 +42,7 @@
         <petclinic:inputField label="Name" name="name"/>
         <petclinic:inputField label="Birth Date" name="birthDate"/>
         <div class="control-group">
-            <label class="control-label">Type </label>
-            <form:select path="type" items="${types}" size="5"/>
+            <petclinic:selectField name="type" label="Type " names="${types}" size="5"/>
         </div>
         <div class="form-actions">
             <c:choose>
diff --git a/src/main/webapp/WEB-INF/tags/selectField.tag b/src/main/webapp/WEB-INF/tags/selectField.tag
new file mode 100644
index 00000000..f93256ac
--- /dev/null
+++ b/src/main/webapp/WEB-INF/tags/selectField.tag
@@ -0,0 +1,23 @@
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
+<%@ attribute name="name" required="true" rtexprvalue="true"
+              description="Name of corresponding property in bean object" %>
+<%@ attribute name="label" required="true" rtexprvalue="true"
+              description="Label appears in red color if input is considered as invalid after submission" %>
+<%@ attribute name="names" required="true" rtexprvalue="true" type="java.util.List"
+              description="Names in the list" %>
+<%@ attribute name="size" required="true" rtexprvalue="true"
+              description="Size of Select" %>
+
+<spring:bind path="${name}">
+    <c:set var="cssGroup" value="control-group ${status.error ? 'error' : '' }"/>
+    <div class="${cssGroup}">
+        <label class="control-label">${label}</label>
+
+        <div class="controls">
+            <form:select path="${name}" items="${names}" size="${size}"/>
+            <span class="help-inline">${status.errorMessage}</span>
+        </div>
+    </div>
+</spring:bind>
\ No newline at end of file
-- 
GitLab