gpt4 book ai didi

java - Struts 2 动态参数绑定(bind)

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

默认堆栈具有 parms 拦截器,它将参数绑定(bind)到正在调用的操作中找到的 setter 。当您知道参数名称时,效果很好。例如,如果请求参数是“employee.name”,则可以将其绑定(bind)到我的操作的属性,该操作具有属性“employee”和属性“name”。为了让它工作,我需要知道请求参数名称是什么,并在我的操作中放置一个名为 setEmployee() 的对象类型 Employee 的 setter,或者它也可以是一个 Map。

如果我想让操作将该参数绑定(bind)到另一个我不知道是哪个属性的属性,该怎么办?假设该操作接收将设置请求参数的名称作为参数。

<s:action name="showEmployee" executeResult="true">
<s:param name="employeePrefix">xyz.wz.empl</s:param>
</s:action>

这意味着将员工的所有参数绑定(bind)到 xyz.wz.empl 的操作。例如,假设请求参数具有以下内容:xyz.wz.empl.name=阿尔弗雷多xyz.wz.empl.lastName=奥索里奥

我想将其绑定(bind)到我的操作的属性(假设是 Map 员工),但这不起作用,因为请求参数是 xyz.wz.empl。如何使用发送到操作的参数 (employeePrefix) 将该动态参数绑定(bind)到调用的操作。

我可以询问请求参数

ActionContext.getContext().getParameters()

并自己进行转换,但我认为必须有另一种方法可以显式调用 Struts 2 框架中的某些内容进行转换,就像 com.opensymphony.xwork2.interceptor.ParametersInterceptor 那样。

谢谢。

最佳答案

我认为这不是一个理想的解决方案,但它可以满足您的需要。

  1. 您的 Struts 2 Action 需要实现 SessionAware 和 ParameterAware 接口(interface)。
  2. 创建一个名为“parameters”的映射私有(private)字段,并为其创建一个 getter/setter。
  3. 现在,当您调用 getParameters() 时,您将获得名称/值对的映射。

现在,对于下一部分,您将需要使用反射。

例如,您需要这样做:

Map myParams = getParameters()
Employee e = new Employee()

Class clas = null;
try {
clas = Class.forName("Employee");
Field fieldlist[] = clas.getDeclaredFields();
for (int i = 0; i < fieldlist.length; i++) {
Field fld = fieldlist[i];
if(myParams.containsKey(fld.getName()))
fld.set(e, myParams.get(fld.getName())
}

} catch (ClassNotFoundException ex) {
// handle exception case
}

这应该将该映射中的所有参数映射到员工对象中的字段(如果映射中存在该字段)。当然,这可以移植到一个单独的方法,该方法属于 Util 类之类的东西,您可以在其中传递要反射(reflect)的类。

关于java - Struts 2 动态参数绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3979366/

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