0

什么是等效的“servlet 代码”:

<jsp:useBean id="user" class="beans.UserBean" scope="session"/>
<jsp:setProperty name="user" property="*"/>

Tomcat 将其翻译为:

beans.UserBean user = null;
synchronized (session) {
    user = (beans.UserBean) _jspx_page_context.getAttribute("user", PageContext.SESSION_SCOPE);
    if (user == null) {
        user = new beans.UserBean();
        _jspx_page_context.setAttribute("user", user, PageContext.SESSION_SCOPE);
    }
}

org.apache.jasper.runtime.JspRuntimeLibrary.introspect(_jspx_page_context.findAttribute("user"), request);

没有其他方法可以轻松做到这一点吗?

4

1 回答 1

1

每个 jsp 编译器都会产生不同的结果。使用commons beanutils它看起来有点像

for(Enumeration pnames = request.getParameterNames();pnames.hasMoreElements();) {
  String name = pnames.nextElement();
  BeanUtils.setProperty(bean,name,request.getParameter(name));
}

请注意,它不处理数组和其他特殊情况。

此外,这也是为什么您通常使用诸如SpringStrutsWicket等 Web 框架的原因——它只是一个样板代码,无论如何您都必须编写验证代码。

于 2009-09-09T12:05:04.473 回答