JSPG0122E:无法解析Websphere 8中的EL函数

Kep*_*pil 3 java jstl el websphere-6.1 websphere-8

我正在将Web应用程序从Websphere 6.1移动到Websphere 8,我在其中一个JSP页面中遇到以下错误:

com.ibm.ws.jsp.translator.JspTranslationException:JSPG0227E:在翻译/jsp/myJsp.jsp时遇到异常:/jsp/myJsp.jsp(863,4) - > JSPG0122E:无法解析EL函数$ {not empty rowVo.operation.package}.at com.ibm.ws.jsp.translator.visitor.validator.ELValidator.validateElFunction(ELValidator.java:500)at com.ibm.ws.jsp.translator.visitor.validator.ELValidator.validateELExpression(ELValidator.java:122) at com.ibm.ws.jsp.translator.visitor.validator.ELValidator.validateELExpression(ELValidator.java:149)at com.ibm.ws.jsp.translator.visitor.validator.ValidateVisitor.validateCustomTagAttribute(ValidateVisitor.java:1757) at com.ibm.ws.jsp.translator.visitor.validator.ValidateVisitor.validateCustomTagAttributeValues(ValidateVisitor.java:1405)at com.ibm.ws.jsp.translator.visitor.validator.ValidateVisitor.visitCustomTagStart(ValidateVisitor.java:294) com.ibm.ws.jsp.translator.visitor.JspVisitor.processJspElement(JspVisitor.java:366)位于com.ibm的com.ibm.ws.jsp.translator.visitor.JspVisitor.processChildren(JspVisitor.java:419) .ws.jsp.translator.visitor.JspVisitor.processJspElement(JspVisitor.java:369)at com.ibm.ws.jsp.translator.visitor.JspVisitor.processChildren(JspVisitor.java:419)at at com.ibm.ws.jsp.translator.visitor.JspVisitor.processJspElement(JspVisitor.java:369)位于com.ibm的com.ibm.ws.jsp.translator.visitor.JspVisitor.processChildren(JspVisitor.java:419). ws.jsp.translator.visitor.JspVisitor.processJspElement(JspVisitor.java:234)位于com.ibm.ws.jsp的com.ibm.ws.jsp.translator.visitor.JspVisitor.visit(JspVisitor.java:216). translator.JspTranslator.processVisitors(JspTranslator.java:127)位于com.ibm.ws.jsp.translator.utils.JspTranslatorUtil的com.ibm.ws.jsp.translator.utils.JspTranslatorUtil.translateJsp(JspTranslatorUtil.java:254). translateJspAndCompile(JspTranslatorUtil.java:121)

JSP文件中的违规部分如下所示:

<c:forEach var="rowVo"
  items="${searchResultContainer.searchResultRowsPage}"
  varStatus="opStatus">
    <c:if test="${not empty rowVo.operation.jobscopeDescription}">
        <td>${rowVo.operation.jobscopeDescription}</td>
    </c:if>
    <c:if test="${not empty rowVo.operation.package}">
        <td>${rowVo.operation.package}</td>
    </c:if>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

令我感到困惑的是EL,当第二个表达式几乎相同时,从第三个表达式抛出异常.

Operation 是生成的类:

public class Operation {

    //Other properties omitted

    @XmlElement(name = "package")
    protected List<Package> _package;
    protected List<String> jobscopeDescription;
    public List<Package> getPackage() {
        if (_package == null) {
            _package = new ArrayList<Package>();
        }
        return this._package;
    }    
    public List<String> getJobscopeDescription() {
        if (jobscopeDescription == null) {
            jobscopeDescription = new ArrayList<String>();
        }
        return this.jobscopeDescription;
    }
}
Run Code Online (Sandbox Code Playgroud)

这些文件在迁移期间没有更改,并且在WAS 6.1上运行良好.有没有人知道这里有什么问题?

小智 6

在WebSphere Application Server v8.0及更高版本中,负责检查保留关键字作为EL变量标识符的使用的代码得到了增强,从而使检查更加严格.变量检查代码不仅检查保留的EL关键字,还检查Java保留关键字.

有关详细信息,请参阅此文章:http://www-01.ibm.com/support/docview.wss?uid = swg21642419&myns = swgws&mynp = OCSSEQTP&mync = A