自定义标签:下拉框年份选择控件
程序员文章站
2022-06-09 09:29:26
...
一、标签源代码
public class CalendarYearTag extends BaseBodyTagSupport {
private String name; //控件名
private int negativeOffset; //负方向的偏移量
private int positiveOffset; //正方向的偏移量
private String allowEmpty = "true"; //是否可以为空
private String defaultCurrent = "false"; //是否默认取当前年份
public int doEndTag() throws JspException {
if(negativeOffset < 0) negativeOffset = 0;
if(positiveOffset < 0) positiveOffset = 0;
Calendar cal = DatetimeUtil.getCalendar();
int curYear = cal.get(Calendar.YEAR);
Map dataModel = new HashMap();
dataModel.put("name", CommonUtil.trim(name));
dataModel.put("negativeOffset", new Long(negativeOffset));
dataModel.put("positiveOffset", new Long(positiveOffset));
dataModel.put("allowEmpty", CommonUtil.trim(allowEmpty));
dataModel.put("defaultCurrent", CommonUtil.trim(defaultCurrent));
dataModel.put("curYear", new Long(curYear));
try{
String ret = render(pageContext.getServletContext(), dataModel, "taglib/CalendarYear.ftl");
pageContext.getOut().println(ret);
}catch(Exception ex){
throw new JspException(ex);
}
return EVAL_PAGE;
}
}
二、FTL模板
<select name="${name}">
<#if allowEmpty=="true">
<option value=""></option>
</#if>
<#list curYear+positiveOffset..curYear-negativeOffset as y>
<option value="${y?string('####')}" <#if defaultCurrent=="true" && curYear==y> selected</#if>>${y?string('####')}年</option>
</#list>
</select>
三、属性说明
name:指定控件的名称。
negativeOffset:相对当前年份的往年方向的偏移量。必须为整型值,当值小于0时,会被重置为0。
positiveOffset:相对当前年份的未来年方向的偏移量。必须为整型值,当值小于0时,会被重置为0。
allowEmpty:指定是否可以选择空值。可选值为:true 或 false。默认值为true。
defaultCurrent:指定默认值是否为当前年份值。可选值为:true 或 false。默认值为false。
四、范例
<cjm:calendarYear name="year" negativeOffset="5" positiveOffset="2" allowEmpty="false" defaultCurrent="true"/>