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.