我继承有很大程度上JSP scriplets一个代码库,迅速成为小于可读的建议,比如这里的,做分页链接的片段:需要对是否保留这个代码
Visa:
<a class="link" href="javascript:doSubmit('MenyNavigation', 'REW_<%= thisPage %>')" >
<%
if(headPointer - nrOfHitsOnPage > 0){
out.print(" << ");
if(tailPointer - nrOfHitsOnPage <= 0){
out.print(1);
} else {
out.print(tailPointer - nrOfHitsOnPage);
}
out.print("-");
out.print(tailPointer);
} %>
</a>
<% if(resultListSize > 0) { %>
<%=(tailPointer + 1)%> - <%= headPointer %>
<%}%>
<a class="link" href="javascript:doSubmit('MenyNavigation', 'FWD_<%= thisPage %>')" >
<%
if(headPointer < resultListSize){
out.print(1 + headPointer);
out.print("-");
if(headPointer + nrOfHitsOnPage > resultListSize){
out.print(resultListSize);
} else {
out.print(nrOfHitsOnPage + headPointer);
}
out.print(" >> ");
} %>
</a>
Appearantly这个代码显示当每页有10个元素并且总共有20个元素并且同样用于其他设置时,显示“Display of 1-10 of 20”,但是我认为这个解决方案不是很可重用。代码已经在我们的项目中的一个地方使用过了,我们决定如果我们有一个问题的解决方案,我们将使用相同的解决方案来解决相同的问题,如果它们出现在不同的地方,现在我必须为> 5个弹出窗口分页(!)有搜索功能,我想知道是否使用这个代码,做一个analgue解决方案或从头开始构建。
控制器Java类也没有那么高的凝聚力:
public class MenyNavigationActionHandler extends PandoraActionHandler {
private ArendeProcessSessionData sessionData;
private final static Logger logger = Logger
.getLogger(MenyNavigationActionHandler.class);
protected IFormData getFormData() {
return null;
}
protected IFormPattern getPattern() {
return EmptyFormPattern.getInstance();
}
protected void performAction(ISessionHandler sessionHandler, Action action) {
String returnPage = null;
try {
sessionData = (ArendeProcessSessionData) sessionHandler.getSessionData();
if(sessionData.returnToUnsavedData(sessionHandler, action)){
return;
}
if (sessionData.getMenuManager() == null) {
MenuManager menuManager = new MenuManager();
sessionData.setMenuManager(menuManager);
}
// Om man bläddar i träfflista på formell kontrollista
if (action.getActionCommand().endsWith(ArendeProcessLocator.getFormellKontrollLista())) {
FormellKontrollInfo fInfo = sessionData.getFormellKontrollInfo();
FormellKontrollSearchAdmin fSearch = fInfo.getFormellKontrollSearchAdmin();
if(fInfo != null) {
if (action.getActionCommand().startsWith("FWD")) {
fSearch.setDirection(PandoraConstants.FWD_DIRECTION);
} else if (action.getActionCommand().startsWith("REW")) {
fSearch.setDirection(PandoraConstants.REW_DIRECTION);
} else {
fSearch.setDirection(PandoraConstants.NO_DIRECTION);
}
}
returnPage = ArendeProcessLocator.getFormellKontrollLista();
action.setReturnPage(returnPage);
} else if (action.getActionCommand().equalsIgnoreCase(
ArendeProcessLabelConstants.SUB_MENU_VISA_REGISTRERADE)) {
sessionData.setNyinkomnaLista(null);
MenuManager menuManager = sessionData.getMenuManager();
returnPage = menuManager.getLatestDestination(action.getActionTarget());
if (returnPage == null) {
returnPage = action.getCurrPage();
}
action.setReturnPage(returnPage);
} else {
// Standard hantering av menyval. Target från Navigation-objekt hämtas från action.getActionModifier
MenuManager menuManager = sessionData.getMenuManager();
if(action.getActionTarget() != null && !action.getActionTarget().trim().equals("")){
returnPage = menuManager.getLatestDestination(action.getActionTarget());
}else{
returnPage = menuManager.getLatestDestination(sessionData.getLatestActionTarget());
}
if (returnPage == null) {
returnPage = action.getCurrPage();
}
action.setReturnPage(returnPage);
}
if(action.getCurrPage().endsWith(ArendeProcessLocator.getNyregistrering())){
// Nytt önskemål, Kom ihåg innehållet på registrera sidan när vi går till listan 2010-12-02
sessionData.getNyregistrering().setKundReferens(sessionHandler.getRequestParameter(PandoraFieldConstants.FIELD_KUNDREFERENS));
sessionData.getNyregistrering().setSokEfternamn(sessionHandler.getRequestParameter(PandoraFieldConstants.FIELD_SOKEFTERNAMN));
sessionData.getNyregistrering().setSokFornamn(sessionHandler.getRequestParameter(PandoraFieldConstants.FIELD_SOKFORNAMN));
sessionData.getNyregistrering().setForetag(sessionHandler.getRequestParameter(PandoraFieldConstants.FIELD_FORETAG));
sessionData.getNyregistrering().setSokandeLandKod(sessionHandler.getRequestParameter(PandoraFieldConstants.FIELD_SELECT_SOKANDELAND));
sessionData.getNyregistrering().setAnkomstDatum(sessionHandler.getRequestParameter(PandoraFieldConstants.FIELD_ANKOMSTDAG));
sessionData.getNyregistrering().setOriginal("original".equals(sessionHandler.getRequestParameter(PandoraFieldConstants.FIELD_HANDLINGSFORM))? true : false);
sessionData.getNyregistrering().setArendeNummer(sessionHandler.getRequestParameter(PandoraFieldConstants.FIELD_ARENDENUMMER));
//printer ??
}
if(!action.getCurrPage().endsWith(ArendeProcessLocator.getNyinkomnaLista2()) && action.getReturnPage().endsWith((ArendeProcessLocator.getNyregistrering()))){
// Rensa minnet av registrera sidan om det inte är listan med registrerade man kommer ifrån
sessionData.getNyregistrering().setKundReferens("");
sessionData.getNyregistrering().setSokEfternamn("");
sessionData.getNyregistrering().setSokFornamn("");
sessionData.getNyregistrering().setForetag("");
sessionData.getNyregistrering().setSokandeLandKod("");
sessionData.getNyregistrering().setAnkomstDatum("");
sessionData.getNyregistrering().setOriginal(true);
sessionData.getNyregistrering().setArendeNummer("");
}
if(action.getActionCommand().equals(ArendeProcessLocator.getNyinkomnaLista())){
sessionData.setNyinkomnaLista(null);
}
} catch (Exception e) {
logger.error("MenyNavigationActionHandler: performAction() ", e);
}
}
}
我有机会获得我的同事谁写的代码,可以请他来指导我,我应该有什么文件,所以分页会起作用,但我想要一个没有脚本的干净而精益的解决方案,这将从头开始,而不是使用脚本来做很多工作。
你认为我应该怎么做?只需使用上面的脚本,使它们适用于我的用例,然后重构我能够使用JSTL标签和EL的最多功能。任何其他评论如何重用Java/JSP代码进行分页?我们的框架相当特别和自定义,我们不使用struts或者spring或者jsf,但是我们自己的框架会使事情变得复杂,因为它依赖于会话数据。
赞赏任何答案或评论。
感谢您的回答。我们最终使用支持Servlet 3.0的websphere WAS 8,但目前我必须坚持使用Servlet 2.5,因为它将全部部署到尚未升级到版本8的WAS 7。 –