2012-06-04 109 views
2

我继承有很大程度上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> 
&nbsp; 
<% if(resultListSize > 0) { %> 
    <%=(tailPointer + 1)%> - <%= headPointer %> 
<%}%> 
&nbsp; 
<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,但是我们自己的框架会使事情变得复杂,因为它依赖于会话数据。

赞赏任何答案或评论。

回答

1

我认为这取决于这个代码有多少,以及是否有时间花在使其更易于维护。除了你(和你的老板),我不认为任何人都可以回答这个问题。

关于如何实现这种事情的问题,您可以选择标准的JSTL标签库或实现自己的或组合。如果您将taglib与EL结合使用,您可以做得更多。会话属性不应该是一个特殊的问题。

虽然有一条建议。 JSTL和JSP EL越来越具有表现力,因此可以将它升级到一个实现Servlet规范最近版本的servlet容器。

+0

感谢您的回答。我们最终使用支持Servlet 3.0的websphere WAS 8,但目前我必须坚持使用Servlet 2.5,因为它将全部部署到尚未升级到版本8的WAS 7。 –