Java Websphere上的BeanELResolver错误
下面是我的控制器代码,它返回一个视图。 如果我在Tomcat7上部署和运行,它的工作状态是完美的,但是在Websphere上部署Tomcat7时,问题仍然存在Java Websphere上的BeanELResolver错误,java,javascript,jquery,jstl,Java,Javascript,Jquery,Jstl,下面是我的控制器代码,它返回一个视图。 如果我在Tomcat7上部署和运行,它的工作状态是完美的,但是在Websphere上部署Tomcat7时,问题仍然存在 @RequestMapping(value = "/review_and_confirm_travel_detail.html", method = RequestMethod.POST) public ModelAndView confirmTravelDetails(@ModelAttribute ViewQuote vie
@RequestMapping(value = "/review_and_confirm_travel_detail.html", method = RequestMethod.POST)
public ModelAndView confirmTravelDetails(@ModelAttribute ViewQuote viewQuote ,
HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse, Model model) throws Exception {
ArrayList<String> stopsList = new ArrayList<String>();
RequestBuilderUtil.getStopsRequestString(viewQuote.getStopsValuesForRequest() , stopsList , this);
List<String > specialInputList = getSpecialInputString(viewQuote.getSpecialInputs());
List<String> specialInputValues = getSpecialInputString(viewQuote.getSpecialInputValues());
Map<String , String > spInputMap =getSpecialInputMap(viewQuote.getSpecialInputs(), viewQuote.getSpecialInputValues());
ModelAndView modelAndView = new ModelAndView("review_and_confirm_travel_detail");
modelAndView.addObject("specialInputList", specialInputList);
modelAndView.addObject("specialInputValues", specialInputValues);
modelAndView.addObject("specialInputMap", spInputMap);
modelAndView.addObject("stopsList", stopsList);
return modelAndView;
}
我自己也遇到了一个非常类似的问题,结果发现tomcat和websphere的EL实现在行为上存在差异。 我认为这是在抱怨(以一种不太明显的方式)它试图使用反射从中访问equals方法的类类型不是公共类,因此反射访问控制失败 特别是这个片段
<core:forEach items="${specialInputMap}" var= "spInput">
<core:if test="${!spInput.equals('')}">
我认为这会将一个类类型为java.util.MapEntry
的对象放入spInput
变量中,然后ELResolver会遍历MapEntry类中的方法以找到equals方法,但当尝试调用equals方法时,会发现MapEntry类无法公开访问
虽然不确定java.util.MapEntry
类是什么,但它看起来不像标准的sun jdk类
如果您改为使用不同类型的Map impl来传递jsp,您可能能够解决这个问题
在我的例子中,我得到了一个列表,其类类型仅为包可见性,并在jsp中调用该列表的大小,即
,这在普通代码中可以通过列表接口调用公共方法大小,但EL-procesor for Websphere使用反射调用包私有类上的方法并获得安全性错误我们改为返回一个标准的ArrayList来解决这个问题
看起来tomcat impl从类实现的接口返回方法,如果该类不是公共的,那么它会更灵活一些。仅记录可能导致此问题的另一个原因。当jsp使用时,我遇到了完全相同的错误消息
${entry.getKey()}
而不是
${entry.key}
前者在tomcat实现中是可以接受的,但在websphere中会导致异常
${entry.getKey()}
${entry.key}