Application Exemple

Bugzooky est une application exemple complète, incluse avec le Téléchargement de Stripes. Lire le code source et les JSPs de l'application permet de bien comprendre les caractéristiques les plus avancées de Stripes.

Bugzooky fournit des exemples sur la façon d'utiliser les fonctionnalités suivantes:

  • Propriétés indexées (utilisées en formules avec plusieurs lignes)
  • Upload d'un fichier
  • Envoi des données vers le client pour téléchargement
  • Validation incluse par défaut et validation configurable
  • Événements multiples par formulaire
  • Réutilisation des mêmes pages et ActionBeans pour mieux construire les vues et la navigation

Le Téléchargement de Stripes inclus un WAR prêt à l'utilisation qui comporte l'application exemple ainsi que le code source. Quelques images d'écran, un exemple de classe et une JSP suivent afin de vous donner envie d'en savoir plus.




"BulkAddEditBugs.jsp"
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ include file="header.jsp" %>


<div class="sectionTitle">Bulk Add</div>

<jsp:useBean id="componentManager" scope="page"
class="net.sourceforge.stripes.examples.bugzooky.biz.ComponentManager"/>
<jsp:useBean id="personManager" scope="page"
class="net.sourceforge.stripes.examples.bugzooky.biz.PersonManager"/>

<stripes:form action="/bugzooky/MultiBug.action">
<stripes:errors/>

<table class="display">
<tr>
<th>ID</th>
<th>Component</th>
<th>Assignee</th>
<th>Priority</th>
<th>Status</th>
<th>Short Description</th>
<th>Long Description:</th>
</tr>

<c:choose>
<c:when test="${actionBean != null}">
<c:set var="list" value="${actionBean.bugs}" scope="page"/>
</c:when>
<c:otherwise>
<c:set var="list" value="<%= new Object[5] %>" scope="page"/>
</c:otherwise>
</c:choose>

<c:forEach items="${list}" var="bug" varStatus="loop">
<tr>
<td>
${bug.id}
<stripes:hidden name="bugs[${loop.index}].id"/>
</td>
<td>
<stripes:select name="bugs[${loop.index}].component.id">
<stripes:option value="">Select One</stripes:option>
<stripes:options-collection collection="${componentManager.allComponents}"
label="name" value="id"/>
</stripes:select>
</td>
<td>
<stripes:select name="bugs[${loop.index}].owner.id">
<stripes:option value="">Select One</stripes:option>
<stripes:options-collection collection="${personManager.allPeople}"
label="username" value="id"/>
</stripes:select>
</td>
<td>
<stripes:select name="bugs[${loop.index}].priority">
<stripes:option value="">Select One</stripes:option>
<stripes:options-enumeration enum="net.sourceforge.stripes.examples.bugzooky.biz.Priority"/>
</stripes:select>
</td>
<td>
<stripes:select name="bugs[${loop.index}].status">
<stripes:option value="">Select One</stripes:option>
<stripes:options-enumeration enum="net.sourceforge.stripes.examples.bugzooky.biz.Status"/>
</stripes:select>
</td>
<td><stripes:textarea cols="25" rows="3" name="bugs[${loop.index}].shortDescription"/></td>
<td><stripes:textarea cols="25" rows="3" name="bugs[${loop.index}].longDescription"/></td>
</tr>
</c:forEach>
</table>

<div class="buttons">
<stripes:submit name="SaveOrUpdate" value="Save"/>
</div>
</stripes:form>
<%@ include file="footer.jsp" %>
MultiBugActionBean.java
@UrlBinding("/bugzooky/MultiBug.action")
public class MultiBugActionBean extends BugzookyActionBean {
/** Populated during bulk add/edit operations. */
private List<Bug> bugs = new ArrayList<Bug>();

/** Populated by the form submit on the way into bulk edit. */
private int[] bugIds;

/** Gets the array of bug IDs the user selected for edit. */
public int[] getBugIds() { return bugIds; }

/** Sets the array of bug IDs the user selected for edit. */
public void setBugIds(int[] bugIds) { this.bugIds = bugIds; }

@ValidateNestedProperties({
@Validate(field="shortDescription", required=true, maxlength=75),
@Validate(field="longDescription", required=true, minlength=25),
@Validate(field="component.id", required=true),
@Validate(field="owner.id", required=true),
@Validate(field="status", required=true),
@Validate(field="priority", required=true)
})
public List<Bug> getBugs() {
return bugs;
}

public void setBugs(List<Bug> bugs) {
this.bugs = bugs;
}

@DefaultHandler
@HandlesEvent("SaveOrUpdate")
public Resolution saveOrUpdate() {
BugManager bm = new BugManager();
PersonManager pm = new PersonManager();
ComponentManager cm = new ComponentManager();

for (Bug bug : bugs) {
Bug newBug = populateBug(bug);
bm.saveOrUpdate(newBug);
}

return new ForwardResolution("/bugzooky/BugList.jsp");
}

@DontValidate
@HandlesEvent("PreEdit")
public Resolution preBulkEdit() {
// If the user didn't select any bugs to edit, bad user.
if (this.bugIds == null || this.bugIds.length < 1) { 
ValidationErrors errors = new ValidationErrors();
errors.add( new SimpleError("You must select at least one bug to edit.") );
getContext().setValidationErrors(errors);
return getContext().getSourcePageResolution();
}

BugManager bm = new BugManager();
for (int id : this.bugIds) {
this.bugs.add( bm.getBug(id) );
}

return new ForwardResolution("/bugzooky/BulkAddEditBugs.jsp");
}
}