We want to put the item names in a list, pass the list to a Simple Tag, and let it to do the job of creating the required HTML tags.
Given this fragment of HTML code:
<form method="POST" action="selected.jsp">
<p>Select beer characteristics:</p>
<p>Color:
<select name='color'>
<option value='light'>light</option>
<option value='amber'>amber</option>
<option value='brown'>brown</option>
<option value='dark'>dark</option>
</select>
</p>
<input type="SUBMIT">
</form>We want to rewrite it:<%@ taglib prefix="st" uri="simpleTags" %>
<!-- ... -->
<form method="POST" action="selected.jsp">
<p>Select beer characteristics:</p>
<p>Color:
<st:select name='color' options='${applicationScope.colors}' />
</p>
<input type="SUBMIT">
</form>Where "colors" is a list of colors, created somewhere else:java.util.List<String> aList = new java.util.ArrayList<String>();
aList.add("light");
aList.add("amber");
aList.add("brown");
aList.add("dark");
application.setAttribute("colors", aList);Our new tag is expected to be named "select", have no body, and a couple of required attribute. This is its declaration in the TLD file:<tag>
<name>select</name>
<tag-class>ch10.SelectTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>options</name>
<type>java.util.List</type>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>name</name>
<required>true</required>
</attribute>
</tag>This is its implementation:package ch10;
import java.io.IOException;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class SelectTag extends SimpleTagSupport {
private List<String> options;
private String name;
public void setOptions(List<String> options) {
this.options = options;
}
public void setName(String name) {
this.name = name;
}
@Override
public void doTag() throws JspException, IOException {
JspWriter out = getJspContext().getOut();
// generate the HTML select open tag
out.print("<select name=" + this.name + '>');
// generate the required HTML option tags
for(String option : options) {
out.print("<option value='" + option + "'>" +
option + "</option>");
}
// generate the HTML select close tag
out.println(" </select>");
}
}Simple tag handlers are discussed in chapter ten of Head First Servlet and JSP.
No comments:
Post a Comment