JSTL URL enkodingo problema
JSTL (JavaServer Pages Standard Tag Library) biblioteka turi problemą. Visi JavaEE mėgėjai ir šiaip prijaučiantys žino, kad HTTP Query parametrai atskiriami & simboliu. Viskas OK. Bėda ta, kad kažkas sugalvojo, jog naudojant <c:url/> tagą su parametrais (<c:param/>) šitas simbolis neužkoduojamas & seka. Dėl to bet kokios pastangos, kad XHTML puslapiukas, sugeneruotas naudojant JSP, atitiktų standartus, nueina šuniui ant uodegos.
Atradau du šios problemos sprendimo būdus:
- Galima naudoti
<c:out value="${someURL}" escapeXml="true"/>. Bet man šitaip nepatinka: per daug rašymo, ypač, kai nuorodų yra daug (nepamirškim, kad prieš tai reikia ir<c:url/>panaudot); - Arba galima parsipūsti JSTL source'ą, susirasti
ParamSupport.aggregateParams()metodąorg.apache.taglibs.standard.tag.common.corepakete, pakeisti ten esančius du&simbolius į&, subuildinti naują JSTL ir pakeisti seną biblioteką nauja. Aš kaip tik taip ir padariau.
Beje, abu šiuos variantus radau čia.