MarcusDau
Occasional Collector

jsp-65535-Limit und FirstPersonalisation-Problem

Hallo zusammen!

Ich habe folgendes Problem und sehe derzeit keinen Lösungsansatz: es soll in unserem Intranet eine "Was ist neu"-Seite geben, auf der alle in einer Datenquelle gelisteten Seiten aufgeführt werden, wo es in diesem Jahr (Zeitraum definierbar) relavante Änderungen/Neuerungen gegeben hat.

Diese Seiten sind nicht für jedermann sichtbar. Es gibt 3 unterschiedliche Berechtigungsstufen.

Mittels FSI hole ich mir alle entsprechenden Einträge aus der Datenquelle:

<CMS_FUNCTION name="contentSelect" resultname="fr_win_jahr">                                                                                                          

        <CMS_PARAM name="schema" value="wasistneu"/>                                                                                                              

        <CMS_VALUE_PARAM name='von' value='#startdate.set("day_of_month",1).set("month",0).set("year",st_jahr).set("hour",0).set("minute",0).set("second",0).getTime()' /> 

        <CMS_VALUE_PARAM name='bis' value='#startdate.set("day_of_month",1).set("month",0).set("year",st_jahr+1).set("hour",0).set("minute",0).set("second",0).getTime()' />

        <QUERY entityType="eintrag">

            <ORDERCRITERIA attribute="datum" descending="1" />                                                                                                                           

            <FILTERPARAM parameter="bis" datatype="java.util.Date" value="0"/>

            <FILTERPARAM parameter="von" datatype="java.util.Date" value="0"/>                                                                                      

            <AND>                                                                                                                                             

                <GTE attribute="Datum" parameter="von" />                                                                                                       

                <LT attribute="Datum" parameter="bis" />                                                                                                       

            </AND>                                                                                                                                            

        </QUERY>                                                                                                                                                  

    </CMS_FUNCTION>

In diesem Schema gibt es eine CMS_INPUT_LINK (ja ich weiß, FS_REFERENCE wird es mal werden!), die den Link auf die entsprechend geänderte Seite beinhaltet.

Diese dann ausgelesenen Seiten sollen tageweise gruppiert aufgelistet werden, also so:

13.04.2011, Mittwoch

     - Win-Text Seite 1

     - Win-Text Seite 2

12.04.2011, Dienstag

     - Win-Text Seite 3

06.04.2011, Mittwoch

     - Win-Text Seite xy

Es kann also auch Lücken zwischen den Tagen geben, wenn dort keine Inhalte sind, auf die man Berechtigung hat.

Habe das derzeit in einer Absatzvorlage so gelöst:

$CMS_FOR(win_eintrag, fr_win_jahr)$

        $CMS_SET(eintrag)$$CMS_VALUE(win_eintrag.eintragstext)$$CMS_END_SET$

        $CMS_VALUE(win_eintrag.link,default:"")$    $-- Hier wird nur die jsp-Variable istEintragErlaubt als boolean-Wert pro Seite generiert --$

<%

        if (istEintragErlaubt)

        {

            neuerTag = "$CMS_VALUE(win_eintrag.datum)$";

            if (!alterTag.equals(neuerTag))

            {

                countTage++;

                if (!alterTag.equals(""))

                {

%>

                </ul>

<%

                }

                alterTag = neuerTag;

%>

                <h2 class="exalead">$CMS_VALUE(win_eintrag.datum.format("dd. MMMM yyyy, EEEE"))$</h2>

                <ul>       

<%

            }

%>

            <li>$CMS_VALUE(eintrag.toString())$</li>

<%

        }

%>

    $CMS_END_FOR$

Man kann sich denken, dass bei vielen Einträgen sehr viel Code dabei rauskommt. Und genau das ist das Problem: der Code ist zu lang und ich bekomme erwartungsgemäß folgenden Fehler um die Ohren:

The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit

Wie kann ich das besser lösen, so dass das Problem nicht mehr auftreten kann? Ich muss es mit JAVA/JSP machen, da ich erst zur Laufzeit weiß, welcher User mit Berechtigung auf die Seite zugreift. Sehe aber irgendwie nicht die Möglichkeit den Code in einzelne JSP-Fragmente auszulagern. Vielleicht hat jemand dazu ne Idee?

Danke Euch im Voraus.

0 Kudos
2 Replies
aVogt
Returning Creator

Das Problem hatte ich auch. Zwei Sachen haben bei mir geholfen:

1. In der Seitenvorlage am Anfang bzw. am Ende ein CMS_TRIM eingefügt (damit wurde die Seite schon mal kleiner)

2. Wenn zu viel dargestellt wird die Seite splitten und die Teile dann in der Hauptseite einbinden (hab es jetzt nicht bei Hand, aber irgendwie mit "jsp include" (kann das bei Bedarf nachreichen.

0 Kudos
feddersen
Community Manager

Wenn man keine includes verwenden will/kann, bleibt eigentlich nur den Code in möglichst viele Blöcke aufzuteilen (statische Blöcke oder Methoden in Objekten)

Ggf. können Sie ihren Scriptlet-Code auch als Taglibrary umschreiben

0 Kudos