2013-09-18 5 views
0

У меня есть контроллер пружинного со следующим кодом:HTML теги хранятся в ModelMap не интерпретируются как HTML браузера

@RequestMapping(value="/getMessage.htm", method=RequestMethod.POST) 
protected String uploadFile(ModelMap model){ 

    //... other codes 

    model.addAttribute("theMessage", "Hello world <b>how are you</b> today?"); 

    return "the-view"; 
} 

В стороне клиента (JavaScript), я показываю это сообщение, используя следующий код:

document.getElementById('theMessageSpan').innerHTML = '<c:out value="${theMessage}"/>'; 

Но когда она отображается, это показывает строковый литерал

Hello world <b>how are you</b> today?

мне нужно, чтобы показать сообщение, как:

Hello worldкак тыtoday?

Я попытался с помощью Apache Commons' StringEscapeUtils.unescapeHtml перед вводом текста в ModelMap, но результат такой же.

Любые мысли?

ответ

2

Я считаю, что по умолчанию <c:out> ускользает от XML. Вам нужно явно указать это не с

<c:out escapeXml="false" value="${theMessage}"/> 

Не можете найти новые документы, но увидеть here. Среди атрибутов, у вас есть

escapeXml

Определяет, должен ли символы <,> &, ',»в результате строки будут преобразованы в соответствующие сущности символов коды. Значение по умолчанию true.

+0

Ничего себе, это было быстро! Проблема решена. Спасибо! Я приму этот ответ, как только stackoverflow позволит мне. – Bnrdo

+0

@onepotato Добро пожаловать. st найти документы тоже ... –

+0

Кроме того, вы можете просто пропустить с помощью 'c: out'. Например. '... innerHTML = '$ {theMessage}';' Нотация скобок JSTL не удаляет XML по умолчанию, как 'c: out'. На самом деле, я думаю, что это самая большая разница между ними. Если вы не избегаете XML, убедитесь, что вы каким-то образом дезинфицируете данные, если они введены пользователем. –