我正在開發一個傳統Tomcat服務器,該服務器不再由提供它的軟件開發人員支持。 web.xml不告訴我正在使用的JSP版本,但所有的.class文件都是Java 1.5。對JSP scriptlet中的選擇框項進行排序
我有一位顧客很沮喪,因爲系統有一些由Java自動填充的html框,它直接填充XML數據庫查詢的(無序)結果。我試圖將一些代碼潛入Selector的JSP中,以便在填充字段之前對字段列表進行排序,但它不起作用,我不明白爲什麼。
的(有刪節)相關代碼:
<%@ page import="src.explorer.ObjectStateFactory"%>
<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
<jsp:useBean id="ExplorerViewContext" scope="session" type="src.explorer.ExplorerViewContext"/>
...
<c:forEach var="nc" items="${ExplorerViewContext.networkControllers}">
<c:choose>
<c:when test="${nc.name == ExplorerViewContext.networkControllerSelection.name}">
<option value="<c:out value="${selectAction}${nc.objectKey}"/>" selected><c:out value="${nc.name}"/></option>
</c:when>
<c:otherwise>
<option value="<c:out value="${selectAction}${nc.objectKey}"/>"><c:out value="${nc.name}"/></option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
相關的代碼我補充:
<%@ page import="src.explorer.ObjectStateFactory"%>
<%@ page import="java.util.*"%>
<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
<jsp:useBean id="ExplorerViewContext" scope="session" type="src.explorer.ExplorerViewContext"/>
...
<%
final Comparator<src.explorer.XmldbObjectState> NC_ORDER = new Comparator<src.explorer.XmldbObjectState>(){
public int compare(src.explorer.XmldbObjectState nc1, src.explorer.XmldbObjectState nc2){
return nc1.getName().compareTo(nc2.getName());
}
};
List myList = ExplorerViewContext.getNetworkControllers();
java.util.Collections.sort(myList,NC_ORDER);
%>
<c:forEach var="nc" items="${myList}">
<c:choose>
<c:when test="${nc.name == ExplorerViewContext.networkControllerSelection.name}">
<option value="<c:out value="${selectAction}${nc.objectKey}"/>" selected><c:out value="${nc.name}"/></option>
</c:when>
<c:otherwise>
<option value="<c:out value="${selectAction}${nc.objectKey}"/>"><c:out value="${nc.name}"/></option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
基本上,我試圖抓住名單和排序之前,它被髮送到HTML。問題是,myList總是空着,我不明白爲什麼。我猜測原始代碼中的ExplorerViewContext.networkControllers正在調用ExplorerViewContext實例的getNetwrokControllers()方法,是嗎?爲什麼我不能在scriptlet中做同樣的事情,並在提供之前重新格式化輸出?
非常感謝您的回答。毫無疑問,編輯bean將是理想的。但是,我只有beans的.class文件,我不知道反編譯是否是最好的方法。對不起,我應該澄清一點。 – Frank 2015-01-09 20:12:55
@Frank,好吧,如果你沒有代碼,你必須做你必須做的事情。事實是,我不像大多數人在這裏那樣對腳本不利。我可以看到一個案例,如果它完成而不是雜亂的使用它們。 – developerwjk 2015-01-09 21:20:11