Skip to content

Instantly share code, notes, and snippets.

@tuxmartin
Created February 9, 2016 17:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tuxmartin/c7117553b9a6a8f6ba6a to your computer and use it in GitHub Desktop.
Save tuxmartin/c7117553b9a6a8f6ba6a to your computer and use it in GitHub Desktop.
Vypis zalomeni radku pomoci <c:out> v JSP pomoci JavaScriptu
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="true" contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<fmt:setLocale value="cs"/>
<script>
$(document).ready(function() {
$('textarea').autosize();
});
</script>
<%--Vypis HTML noveho radku <br/> klientovi.
<c:out> nahrazuje <br> za HTML entity, ale vypnout to nejde kvuli XSS a podobnym utokum. Vykonaval by se vsechen kod.
Jednim ze zpusobu je css "white-space:pre", ale neni idealni.
http://stackoverflow.com/questions/14514440/new-line-doesnt-appear-when-using-c-out-tag/14514647#14514647
Moje reseni: Vytahnu si string z databaze a vsechny znaky noveho radku nahradim za mezeru + netisknutelny ASCII znak.
Ja jsem zvolil znak "DEC=29, HEX=0x1D, GS, Group Separator", asi je to jedno. Ale zkousel jsem take
znak "DEC=3, HEX=0x03, ETX, End of Text" a s nim mi to nefungovalo.
Pokud klientovi nefunguej JavaScript, netisknutelny ASCII znak se nezobrazi a zalamovani resi prohlizec,
kdyz text dojde na konec stranky. Mezeru proto, ze prohlizec netisknutelny znak nezobrazi a slova, ktera by jinak
byla oddelena novym radkem by byla zobrazena dohromady.
Pokud JavaScript funguje, nahradi se mezera a ASCII znak za <br /> a prohlizec zalame radky :-)
--%>
<c:set var="newLine" value="<%= \"\n\" %>" /> <%-- Znak noveho radku musi byt definovany pres JSP Expression. --%>
<c:set var="replaceNewLineChar" value="<%= \"\\u0020\\u001d\" %>" />
<script>
function newLineHack(id) {
$(document).ready(function(){
var s = $('#'+id).html();
s = s.replace(/\u0020\u001d/g,'<br/>'); <%-- \u0020 = mezera, \u001d = "Group Separator" --%>
$('#'+id).html(s);
});
}
newLineHack("postText");
newLineHack("commentText");
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment