到目前为止,我有一个简单的文本区,我复制/粘贴一个分隔的文本(使用逗号)。每一行代表一个新的日志(在本例中是GPS日志)。
例如:1,15:26:38,5103.5889,400.8531,5
2,15:26:40,5103.5864,400.8449,6
3,15:26:43,5103.5815,400.8335,10
4,15:26:44,5103.5771,400.8259,12
5,15:26:48,5103.5688,400.8123,15
6,15:26:50,5103.5659,400.7946,22
7,15:26:52,5103.5513,400.7545,36
这里有:name, time, latitude, longitude, speed
现在我使用一个简单的过程代码,如下所示:
List<GeoCoordinate> coordinates = new ArrayList<GeoCoordinate>();
for (String line : gpsDump.split("\n")){
List<String> items = Arrays.asList(line.split("\s*,\s*"));
GeoCoordinate c = new GeoCoordinate();
Date date = null;
try {
date = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse(items.get(1));
} catch (ParseException ex) {
Logger.getLogger(GeoTrackController.class.getName()).log(Level.SEVERE, null, ex);
}
c.setDateTime(date);
c.setLatitude(Float.parseFloat(items.get(2)));
c.setLongitude(Float.parseFloat(items.get(3)));
c.setSpeed(Integer.parseInt(items.get(4)));
coordinates.add(c);
}
但是我想重写这段代码,使它更面向对象。我首先想到在我的Entity类中转换这些设置,但是当我接受基本培训时,他们不鼓励我这样做。
我也读过关于转换器,但它似乎只用于文本框。
那么最好的方法是什么呢?我也读过转换器,但它似乎只用于文本框。
错,你可以在任何实现ValueHolder
的UIComponent
中使用它们(注意这个接口定义了一个getter和setter来获取/设置转换器)。以HtmlInputTextarea
为代表的<h:inputTextarea>
也属于这一类。
<h:inputTextarea ... converter="geoCoordinateCsvConverter" />
JSF Converter
确实是在模型表示的基于Java对象的格式和HTML表示的基于字符串/字符序列的格式之间进行转换的正确方法。