2

私は、主にJSPスクリプトレットがあり、すぐに読みにくくなるコードベースを継承しています。たとえば、ページ付けリンクを実行するフラグメントは次のとおりです。

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>

このコードは、ページごとに10個の要素があり、合計で20個ある場合、および他の設定の場合と同様に、「Display 1-10 of 20」というテキストを表示しますが、このソリューションはあまり再利用できないと思います。コードはプロジェクトの1つの場所ですでに使用されており、問題の解決策が1つある場合、同じ問題が別の場所に表示された場合は同じ解決策を使用することにしました。5つを超えるポップアップに対してページネーションを行う必要があります。 (!)検索機能があり、このコードを使用して、分析ソリューションを作成するのか、ゼロから構築するのか疑問に思います。

コントローラの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を使用していませんが、セッションデータに大きく依存しているため、物事を複雑にする独自のフレームワークを使用しています。

任意の回答やコメントをいただければ幸いです。

4

1 に答える 1

1

それは、このコードがどれだけあるのか、そしてそれをより保守しやすくするために費やす時間があるかどうかによると思います。その質問に答えられるのは、あなた (とあなたの上司) だけだと思います。

この種のものをどのように実装するかという問題については、標準の JSTL タグ ライブラリを使用するか、独自に実装するか、またはその組み合わせを選択できます。また、taglibs と EL を組み合わせると、さらに多くのことができます。また、セッション属性は特に問題にはなりません。

一つアドバイスですが。JSTL と JSP EL はより表現力が増しているため、サーブレット仕様の最新版を実装するサーブレット コンテナーにアップグレードする価値があるかもしれません。

于 2012-06-04T12:04:45.990 に答える