我有一个看起来不太漂亮的Java Bean中的几个属性。例如。最大速度。对于我来说,有太多的属性需要手动将它们写在我的HTML文件中,所以它们看起来很漂亮。如何将Java Bean属性映射到另一个输出名称?
电流输出:MAX_SPEED,min_speed
通缉输出:最大速度,最小速度
问:我如何映射 “MAX_SPEED”, “min_speed” 等20个属性设置为 “最高速度”,“最低速度“等,为漂亮的输出打印?每次我想将它们添加到网页上时,无需手动编写它们,这是可行的吗?
我有一个看起来不太漂亮的Java Bean中的几个属性。例如。最大速度。对于我来说,有太多的属性需要手动将它们写在我的HTML文件中,所以它们看起来很漂亮。如何将Java Bean属性映射到另一个输出名称?
电流输出:MAX_SPEED,min_speed
通缉输出:最大速度,最小速度
问:我如何映射 “MAX_SPEED”, “min_speed” 等20个属性设置为 “最高速度”,“最低速度“等,为漂亮的输出打印?每次我想将它们添加到网页上时,无需手动编写它们,这是可行的吗?
查阅下面这些功能;
设置显示名称
public void setDisplayName(String givenProperty){
String displayName = null;
// Perform Some Operation to generate you display Name
// String [] tokens = givenProperty.split("_");
// displayName = tokens[0] + " " + tokens[1];
objectOfHashMap.put(givenProperty,displayName);
}
要获取显示名称:
public String getDisplayName(HashMap<String, String> givenHashMap, String givenProperty){
String outputString = null;
for(Map.Entry<String, String> pairs1 : givenHashMap.entrySet()){
if(givenProperty.equals((String)pairs1.getKey())){
outputString = pairs1.getValue();
}
}
return outputString;
}
让我知道,如果你有任何问题。
要查看我最终使用的内容,请参阅下面我自己的答案。它来自你的setDisplayName方法,所以我会将你的答案标记为正确的。谢谢! – user2602152
如果你写了一个方法,那么期望一个字段名(属性名)并返回一个很好格式化的输出呢?
例如:
public String formatProperty(String propertyName, String userFriendlyLabel) {
Field someField = this.getClass().getField(propertyName);
Object value = null;
if(someField != null) {
value = someField.get(this);
}
return userFriendlyLabel + ": " + value;
}
下面显示的代码适用于您的特定用例: 如果该类包含其中包含“_”的属性,它将返回特定类中定义的所有方法和属性的格式化名称。
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
public class ReplaceMethodNames {
/**
* @param args
*/
String max_speed;
String min_speed;
public static void main(String[] args) {
// Provide the class Name as parameter you may want to format
List<String> formattedNames =getFormattedProperties(ReplaceMethodNames.class);
System.out.println(formattedNames);
}
public static List<String> getFormattedNames(Class clazz){
List<String> formattedNames = new ArrayList<String>();
Method[] methods = clazz.getMethods();
for(Method method:methods){
String methodName = method.getName();
StringBuilder newMethodName = new StringBuilder();
for(int i = 0 ; i<methodName.length();i++){
if(methodName.charAt(i)=='_') {
newMethodName.append(' ');
newMethodName.append(Character.toUpperCase(methodName.charAt(i+1)));
i++;
}else if(i==0){
newMethodName.append(Character.toUpperCase(methodName.charAt(i)));
}else {
newMethodName.append(methodName.charAt(i));
}
}
if(methodName.contains("_")){
formattedNames.add(newMethodName.toString());
}
}
return formattedNames;
}
public static List<String> getFormattedProperties(Class clazz){
List<String> formattedNames = new ArrayList<String>();
Field[] fields = clazz.getDeclaredFields();
for(Field field:fields){
String methodName = field.getName();
StringBuilder newMethodName = new StringBuilder();
for(int i = 0 ; i<methodName.length();i++){
if(methodName.charAt(i)=='_') {
newMethodName.append(' ');
newMethodName.append(Character.toUpperCase(methodName.charAt(i+1)));
i++;
}else if(i==0){
newMethodName.append(Character.toUpperCase(methodName.charAt(i)));
}else {
newMethodName.append(methodName.charAt(i));
}
}
if(methodName.contains("_")){
formattedNames.add(newMethodName.toString());
}
}
return formattedNames;
}
public static void test_methodA(){}
public static void test_methodB(){}
public static void test_methodC(){}
public static void test_methodD(){}
}
我结束了这种方法prettyfying(如果被允许作为一个字)我的属性,并加入了一些如果在特殊情况下,其他的句子。无法使用开关大小写,因为Java 1.6不支持切换字符串,显然。请注意公共地方的WordUtils-package。 NB:请注意,这只适用于我的特殊情况,所有属性名称除以下划线。
public String niceDisplayName(String property) {
String[] tokens = property.split("_");
StringBuilder sb = new StringBuilder();
for (int i=0;i<tokens.length;i++) {
tokens[i] = WordUtils.capitalize(tokens[i]);
sb.append(tokens[i]);
if((i+1) < tokens.length) {
sb.append(" ");
}
}
return sb.toString();
}
如果我正确理解你的问题,你有很多速度属性,你想要一个简单的方法来访问这些?为什么你没有Class Speed,然后你可以拥有MaxSpeed,MinSpeed等的属性... – JNL
不,我想打印属性,名称和它们各自的值。但是当我打印属性“max_speed”时,它看起来不太好,我宁愿要打印“Max Speed”。我想要这个自动化的,因为我不想为每个属性每次我想要它打印到网页上写手动漂亮的名字。 – user2602152
好的。那么HashMap如何呢?如果对象值与任何键匹配,只需提取该对象的值。 –
JNL