2013-07-19 28 views
3

我而動從WebSphere 6.1 Web應用程序到WebSphere 8,和我在我的網頁JSP一個遇到以下錯誤:JSPG0122E:無法解析EL函數在WebSphere 8

com.ibm。 ws.jsp.translator.JspTranslationException:JSPG0227E:翻譯/jsp/myJsp.jsp時捕獲到異常:/jsp/myJsp.jsp(863,4) - > JSPG0122E:無法解析EL函數$ {not empty rowVo.operation。包}。在com.ibm.ws.jsp.translator.visitor.validator.ELValidator.validateElFunction(ELValidator.java:500)在com.ibm.ws.jsp.translator.visitor.validator.ELValidator.validateELExpression(ELValidator.java:122)在com.ibm.ws.jsp.translator.visitor.validator.ELValidator.validateELExpression(ELValidator.java:149)在com.ibm.ws.jsp.translator.visitor.validator.ValidateVisitor.validateCustomTagAttribute(ValidateVisitor.java:1757)在com.ibm.ws.jsp.translator.visitor.validator.ValidateVisitor.validateCustomTagAttributeValues(ValidateVisitor.java:1405)在com.ibm.ws.jsp.translator.visitor.validator.ValidateVisitor.visitCustomTagStart(ValidateVisitor.java:294) com.ibm.ws.jsp.translator.visitor.JspVisitor.processJspElement(JspVisitor.java:366)at com.ibm.ws.jsp.translator.visitor.JspVisitor.processChildren(JspVisitor.java:419)at com.ibm .ws.jsp.translator.visitor.JspVisitor.processJspElement(JspVisitor.java:369)at com.ibm.ws.jsp.translator.visitor.JspVisitor.processChildren(JspVisitor.java:419)at com.ibm.ws.jsp.translator.visitor.JspVisitor.processJspElement(JspVisitor.java:369)在com.ibm.ws.jsp.translator.visitor.JspVisitor.processChildren(JspVisitor.java:419)在com.ibm。 ws.jsp.translator.visitor.JspVisitor.processJspElement(JspVisitor.java:234)at com.ibm.ws.jsp.translator.visitor.JspVisitor.visit(JspVisitor.java:216)at com.ibm.ws.jsp。 translator.JspTranslator.processVisitors在com.ibm.ws.jsp.translator.utils.JspTranslatorUtil(JspTranslator.java:127)在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> 

讓我感到困惑的是,第二個幾乎完全相同時,第三個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; 
    } 
} 

這些文件在遷移過程中沒有改變,並且工作得很好的WAS 6.1。有沒有人知道這裏有什麼問題?

回答

5

在WebSphere Application Server v8中增強了負責檢查保留關鍵字作爲EL變量標識符使用情況的代碼。0以上,使檢查更加嚴格。變量檢查代碼不僅檢查保留的EL關鍵字,還檢查Java保留關鍵字。

看到這篇文章的更多信息:http://www-01.ibm.com/support/docview.wss?uid=swg21642419&myns=swgws&mynp=OCSSEQTP&mync=A

+0

啊,完美。我正在尋找這樣的解釋,但找不到任何東西。謝謝! – Keppil

+0

不錯! +1。 IBM產品很難找到類似的東西。 –

1

看起來這個錯誤是由於Websphere 8無法解析包含package屬性或變量的表達式EL。例如,將上述內容更改爲

<c:if test="${not empty rowVo.operation.getPackage()}"> 

使其工作。

我還做了我的理論的一個小測試與這個小片段:

<c:set var="salary" scope="session" value="${2000*2}"/> 
<c:out value="Salary: ${salary}"/> 

運行正常,併產生預期的輸出Salary: 4000。但是,

<c:set var="package" scope="session" value="${2000*2}"/> 
<c:out value="Salary: ${package}"/> 

產生與上面相同的錯誤。