我正在开发一个使用Servlets
的应用程序。我被要求不要让我的老板使用Struts2 or JSF or SpringMVC
,而只是Servlets and Jsps
。在我的Servlet
中,我需要调用request.getParameter("parameterName")
来检索参数值。
我的问题
是否存在Java库,我可以将JavaBean
和HttpServletRequest
个对象传递给并填充已填充的JavaBean
。即JavaBean
自动填充请求参数。
答案 0 :(得分:1)
我通常认为任何类型的JavaBean反射都是Commons BeanUtils,而且他们确实在BeanUtilsBean
中有适当的方法:
public void populate(Object bean, Map<String,? extends Object> properties) throws IllegalAccessException, InvocationTargetException
根据以下内容填充指定bean的JavaBeans属性 指定的名称/值对。此方法使用Java反射API 识别相应的&#34;属性设置器&#34;方法名称和处理 String类型的setter参数,boolean,int,long,float和 双。另外,这些类型的数组设置器(或者 相应的原始类型)也可以被识别出来。
要为每个属性调用的特定setter方法是 使用通常的JavaBeans内省机制确定。从而, 您可以使用BeanInfo类来识别自定义setter方法 与bean本身的类相关联。如果没有这样的BeanInfo class是可用的,标准方法名称转换(&#34; set&#34; plus 使用了有问题的财产的大写名称。
注意:与JavaBeans规范相反,它具有更多 一个setter方法(具有不同的参数签名)用于相同的方法 属性。
警告 - 此方法的逻辑是为提取而自定义的 来自HTTP请求的基于字符串的请求参数。可能是 不是你想要的类型转换的一般属性复制。 为此,请查看copyProperties()方法。
请注意,它是自定义用于从HTTP请求中提取基于字符串的请求参数,因此它正是您想要的。作为HTTP请求参数的问题以Map<String, String[]>
的形式出现,需要从数组中解包。
我做了一个快速测试,以确保它按预期工作。我注意到类必须为public
并且在自己的文件中才能使内省工作。
我像这样创建一个JavaBean:
public class JavaBean {
String userName;
String password;
Integer id;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
并使用以下内容进行快速测试:
public static void main(String[] args) throws Exception {
final Map<String, String[]> params = new HashMap<>();
params.put("userName", new String[]{"userA"});
params.put("password", new String[]{"secrect"});
params.put("id", new String[]{"10"});
final JavaBean javaBean = new JavaBean();
BeanUtilsBean.getInstance().populate(javaBean, params);
System.out.println(javaBean.getUserName());
System.out.println(javaBean.getPassword());
System.out.println(javaBean.getId());
}
输出符合预期:
userA
secrect
10
我还注意到,对于数字属性,它似乎不喜欢int
- 似乎期待Integer
。
答案 1 :(得分:0)
来自Ignite Realtime的Jive软件有一个BeanUtils类,看起来可以做你想要的。它是开源的。我从来没用过它。它位于OpenFire下载here。