我有一个Servlet,我使用Map<Integer, String>
月,日,年使用JSTL标记在Select tag
显示。
例如在Servlet代码中:
// Storing month in key-value pair
Map<Integer, String> months = new LinkedHashMap<Integer,String>();
months.put(1, new String("Jan"));
months.put(2, new String("Feb"));
months.put(3, new String("Mar"));
months.put(4, new String("Apr"));
...
// Putting month in request scope to be accessed in JSP
request.setAttribute("months", months);
但是,我想在其他Helper class
中编写Map数据结构代码并在Servlet中调用它,以便我的Servlet变得不那么乏味
问题:
答案 0 :(得分:2)
简单地:
Map<Integer, String> months = new Helper().months();
根据您的需要,您也可以将其实现为静态方法。使用常规方法使用DI更加合适(大部分时间)。
没有必要在方法中核心数月。 SimpleDateFormat可以处理这个问题。 (使用joda时间而不是GregorianCalendar可能会更好一些。)
public static Map<Integer, String> months() {
Map<Integer, String> months = new HashMap<Integer, String>();
for(int i=0;i<12;i++){
GregorianCalendar cal = new GregorianCalendar(2000, i, 1);
String month = new SimpleDateFormat("MMM", Locale.ENGLISH).format(cal.getTime());
months.put(i + 1, month);
}
return months;
}
请求范围:为每个请求调用您的servlet。只要您将月份作为属性添加到请求中,一切都应该没问题。实际上没有必要为每个请求创建地图。几个月不会改变那么多。您应该在启动时将地图存储在应用程序上下文中。
答案 1 :(得分:1)
我不确定如果我正确地跟着你,但在这里它 - 。
你可以写一个类Helper
并且可以在其中有一个静态方法说getMonths
将返回这个Map。喜欢 -
public class Helper {
private Helper(){ }
private static Map<Integer, String> months = new LinkedHashMap<Integer, String>();
static{
months.put(1, "Jan");
months.put(2, "Feb");
months.put(3, "Mar");
months.put(4, "Apr");
...
}
public static Map<Integer, String> getMonths(){
return months;
}
}
你可以从你的servlet调用这个方法,比如 -
Map<Integer, String> months = Helper.getMonths();
因为这个Map是常量但是可变的,你可以从Guava为此目的使用ImmutableMap。
答案 2 :(得分:1)
不太确定,但可以:
String[] months = DateFormatSymbols.getInstance().getMonths();
方法实施:
public static Map<Integer, String> months() {
Map<Integer, String> months = new HashMap<Integer, String>();
String[] instance = DateFormatSymbols.getInstance(Locale.ENGLISH).getShortMonths();
for (int i = 0; i < instance.length; i++) {
months.put(i + 1, instance[i]);
}
return months;
}