lunes, 6 de julio de 2009

Escapar apóstrofe en los mensajes de los resource de Spring Framework

Como parte de uno de los mensajes quería meter una serie de etiquetas HTML que además tuvieran código javascript asociado. Los apóstrofes a secas, se resuelven mal, cortando el resto del mensaje, otras combinaciones dejaban los apóstrofes pero impedían la sustitución de los parámetros encerrados. Finalmente salí con la siguiente solución:


\'' algo {0} '\' --> tras resolverse el mensaje --> ' algo valor_param_0 '


Error.Code Mi mensaje de error para el objeto "{0}" <div class=""><img src="img/t2.gif" id="{1}_triangle"/> <a onclick="javascript:void toggleDisplay(''{1}_triggerId'', ''{1}_triangle'', ''Mostrar algo'', ''Ocultar algo'', ''{1}_divContainer'')" style="cursor: pointer; text-decoration: underline;" target="_blank" id="{1}_triggerId">Mostrar algo</a></div><div id="{1}_divContainer" style="display: none;" class="propertyRow">{2}</div>


Con esto se consigue tanto escapar los apóstrofes, como sustituir todos los parámetros correctamente.

Como argumentos este mensaje espera esto:

- (0) Una cadena con el nombre del objeto al que va destinado el mensaje.
- (1) El índice que quiero asignar a ese mensaje para que sus bloques que se van a mostrar y ocultar sean independientes de los de los demás mensajes.
- (2) El mensaje que aparecerá en el bloque que se oculta y muestra

Una vez resuelto el mensaje, dará lugar al siguiente código HTML cuando se imprima el mensaje de error por el jsp correspondiente:

(Para los argumentos: (0) fishka, (1) 33, (2) Mensaje oculto )

Mi mensaje de error para el objeto "fishka" <div class=""><img src="img/t2.gif" id="33_triangle"/> <a onclick="javascript:void toggleDisplay(''33_triggerId'', ''33_triangle'', ''Mostrar algo'', ''Ocultar algo'', ''33_divContainer'')" style="cursor: pointer; text-decoration: underline;" target="_blank" id="33_triggerId">Mostrar algo</a></div><div id="33_divContainer" style="display: none;" class="propertyRow">Mensaje oculto</div>