gpt4 book ai didi

java - Core Java 中的 OGNL 表达式 - 使用动态键访问 Map

转载 作者:行者123 更新时间:2023-12-01 05:12:54 25 4
gpt4 key购买 nike

我是 OGNL 的新手。我正在尝试在核心java中编写OGNL表达式来检索属性/调用方法。

这是我的测试类。它有一个键列表和一个使用这些键来存储值的映射。请看下面

package ognl.test;
import java.util.List;
import java.util.Map;

public class OGNLTestProg {

List<String> keys = null;
Map<String, Object> data = null;

public OGNLTestProg(List<String> keys, Map<String, Object> data){
this.keys = keys;
this.data = data;
}

public List<String> getKeys(){
return keys;
}

public Object getData(String key){
return data.get(key);
}
}

下面是实例化上述类的对象并使用OGNL调用一些方法的测试程序。

package ognl.test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import ognl.Ognl;

public class Test {
public static void main(String[] args) throws Exception {
String str1 = "1";
String str2 = "2";
List<String> keys = new ArrayList<String>();
keys.add(str1);
keys.add(str2);

User u1 = new User();
u1.setFirstName("x");
u1.setLastName("y");

User u2 = new User();
u2.setFirstName("x1");
u2.setLastName("y1");

Map<String, Object> data = new HashMap<String, Object>();
data.put(str1, u1);
data.put(str2, u2);

OGNLTestProg o = new OGNLTestProg(keys, data);

/**
#{
#outerObj = #this,
'users': getKeys().
{
#{
#user = outerObj.getData(#this),
#{
'firstName': user.getFirstName(),
'lastName':user.getLastName()
}
}
}
}
*/
Object expression1 = Ognl.parseExpression("#{"+
"#outerObj = #this,"+
"'users': getKeys()."+
"{"+
"#{"+
"#user = outerObj.getData(#this),"+
"#{ 'firstName': user.getFirstName(),"+
"'lastName':user.getLastName()"+
"}"+
"}" +
"}"+
"}");


Map<String,Object> map = (Map<String,Object>)Ognl.getValue(expression1, o);

}

}

User 是一个自定义类,具有firstName 和lastName 作为属性。

我试图使用 OGNL expr 实现的是迭代列表,检索每个键,然后将该键传递给映射以检索值(用户对象),然后调用该对象上的某些属性。

虽然我可以使用迭代列表

'users': getKeys().{
//I need to access the getData() method of the root object here passing the current #this object
}

我的 OGNL 表达式引发以下错误 线程“main”中的异常ognl.NoSuchPropertyException:java.lang.String.outerObj

请帮忙。我在 google 上找到了大量有关使用 OGNL 和 struts2 标签的内容,但没有太多关于它如何用于访问上面的对象属性的信息。

问候, buggy

最佳答案

如果我要实现您想要的功能,那么我可能会使用 google guava Table 对象来创建多个索引用户对象,然后您可以通过一个简单的 map.get(key) 调用来检索该对象。

您的示例中的内容甚至与 API 上的 guava Table wiki 教程中的内容完全匹配。你让事情变得比原本应该的更加复杂。 ;)

关于java - Core Java 中的 OGNL 表达式 - 使用动态键访问 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11796766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com