2012-04-24 3 views
2

Je crée un système de saisie de l'heure où l'utilisateur a la possibilité de sélectionner l'heure et les minutes via deux listes déroulantes distinctes. Ainsi, la boîte horaire a les numéros 1-12 et la boîte des minutes a 00-59.Spring JSP Sélectionner la liste pour la gamme de nombres

Cela fait partie d'un projet Spring 2.5 Java EE.

J'ai dans mon JSP, par exemple, pour créer les valeurs d'option dans le cadre d'une liste déroulante, sélectionnez:

<% for(int i=1; i<=12; i++) { %> 
<option value="<%=i %>" <%= Integer.parseInt(time1fromHr)==i?selected:"" %> /> 
<% } %> 

La boucle génère toutes les heures et marque l'heure sélectionnée par défaut. Eh bien, cela me semble assez moche, surtout parce qu'il y a beaucoup de code Java impliqué ici et je me demandais s'il y avait une solution plus élégante pour aborder ce problème en utilisant les balises JSP ou la bibliothèque Spring. Je passe les paramètres actuellement définis via l'objet ModelAndView dans Spring.

+0

il serait probablement plus joli si vous regardez la boucle et déroula juste eu 12 déclarations avec l'heure chèque codé en dur, plus l'heure jsp – ControlAltDel

+0

Je veux dire la divergence de vues se rappeler que vous avez pour pouvoir sélectionner l'option déjà sélectionnée ce qui signifie que chaque minute doit vérifier si c'est "l'un" – IcedDante

Répondre

3

Dans votre modèle, vous pouvez passer une liste d'entiers pendant des heures et une autre pour des minutes. Ensuite, vous pouvez utiliser le formulaire: select tag.

<form:select path="hour"> 
    <form:options items="${hours} /> 
</form:select> 

Si votre objet de commande pour la forme a la valeur sélectionnée définie dans la valeur « heure », et le modèle contient 1-12 dans la valeur « heures », il devrait rendre la sélection et prendre soin de marquer l'option appropriée sélectionnée. Ensuite, vous faites la même chose pour les minutes.

Si vous ne voulez pas aller dans la direction taglib, vous pouvez à nouveau placer les heures dans le modèle et utiliser JSTL. Quelque chose comme:

<c:forEach var="hour" items="${hours}"> 
    <c:if test="${hour} == ${selectedHour}"> 
    <option value="${hour}" selected="selected">${hour}</option> 
    </c:if> 
    <c:if test="${hour} != ${selectedHour}"> 
    <option value="${hour}" >${hour}</option> 
    </c:if> 
</c:forEach> 

Je sais qu'il ya une meilleure façon de faire le c: si une partie, en utilisant peut-être un c: choisir, mais vous obtenez l'essentiel. Vous avez votre valeur sélectionnée dans selectedHour et vos choix en heures dans le modèle.

+0

J'aime cette solution, surtout parce que je ne suis pas encore une personne forte du printemps, merci! – IcedDante

+0

Bien que je pense qu'il serait préférable d'utiliser / ici ... mais whatevs – IcedDante

+0

oui, et je l'ai mentionné au bas de ma réponse. Je n'utilise pas beaucoup JSP activement ces jours-ci et était à court de temps, donc je viens de mettre le c: si là pour faire passer le message. – digitaljoel

1

Oui il est, cette partie de Spring MVC:

@RequestMapping(value="/index.html",method=RequestMethod.GET) 
    public String form(ModelMap map) { 
     Map<String,String> country = new LinkedHashMap<String,String>(); 
    country.put("US", "United Stated"); 
    country.put("CHINA", "China"); 
    country.put("SG", "Singapore"); 
    country.put("MY", "Malaysia"); 
    map.addAttribute("countryList", country); 
     return "index"; 
} 

puis utilisez:

<form:select path="country" items="${countryList}" /> 

ne pas oublier d'ajouter la bibliothèque de types de printemps à votre page:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 
+0

Comment l'option sélectionnée est-elle marquée à l'aide de cet exemple? – IcedDante

0

utilisation JSTL pour la comparaison

<c:forEach var="hour" items="${hours}"> 
    <c:if test="${hour == selectedHour}"> 
    <option value="${hour}" selected="selected">${hour}</option> 
    </c:if> 
    <c:if test="${hour != selectedHour}"> 
    <option value="${hour}" >${hour}</option> 
    </c:if> 
</c:forEach> 

OR 

<c:forEach var="hour" items="${hours}"> 
    <c:if test="${hour eq selectedHour}"> 
    <option value="${hour}" selected="selected">${hour}</option> 
    </c:if> 
    <c:if test="${hour ne selectedHour}"> 
    <option value="${hour}" >${hour}</option> 
    </c:if> 
</c:forEach> 
Questions connexes