Я работаю над проектом Struts2, в классе действий я передаю строку на страницу jsp. Я хочу отображать содержимое этой строки как xml на странице jsp.
jsp-страница: response.jsp
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<s:property value = "sampleStr" />
Класс действия: ResponseAction
public class ResponseAction extends ActionSupport {
private static final long serialVersionUID = 1L;
public String sampleStr;
public String execute() throws IOException {
String responseStr = readStringFile();
setSampleStr(responseStr);
return SUCCESS;
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public String readStringFile() throws IOException{
String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n"+
"<response>"+ "$$" +
"</response>";
InputStream inputStream = XmlFormatter.class.getResourceAsStream("/sample.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-16")));
String s = "";
List list = new ArrayList();
String line;
while ((line = reader.readLine()) != null) {
list.add(line);
}
for (Object s1: list) {
s= s + s1;
}
xmlStr = xmlStr.replace("$$", s);
return xmlStr;
}
public String getSampleStr() {
return sampleStr;
}
public void setSampleStr(String sampleStr) {
this.sampleStr = sampleStr;
}
}
Struts.xml:
<package name = "default" namespace = "/" extends = "struts-default">
<action name = "PEConsolidation" class = "com.metlife.ibit.pe.web.controller.actions.ResponseAction">
<interceptor-ref name = "defaultStack" />
<result name = "success">/WEB-INF/jsps/response.jsp</result>
</action>
</package>
Когда я смотрю response.jsp, он отображает строку возврата в виде текста. пожалуйста, помогите кто-нибудь отобразить как содержимое xml?




Я думаю, что браузер пытается интерпретировать теги XML как теги HTML и, если этого не делает, игнорирует их.
Вам нужно будет заменить каждый символ <и> на &lt; и &gt; соответственно. Вы можете использовать очень полезный метод String.replaceAll() в Java API.
Кроме того, вы можете проверить этот Страница Oracle. Было бы очень полезно в вашем процесс разработки с использованием JSP с технологиями XML.
s:property имеет встроенную функцию экранирования для HTML, JavaScript и XML.
По умолчанию он экранирует HTML.
Я думаю, что то, что вы хотите сделать, - это вообще никуда не деться:
<s:property value = "sampleStr" escapeHtml = "false" />
Вы также должны проверить http-заголовки ответа ("content-type: text/html" в вашем случае будет неправильным).
Вместо использования jsp вы можете использовать другой тип результата, возможно, написать свой собственный.
Если вы хотите, чтобы это был истолкованный как XML, вам необходимо установить расположение контента, с оговоркой, что пользователи / браузеры будут обрабатывать XML-контент в зависимости от того, что он настроил. Если вам просто нужен простой текст, например, не окрашенный в синтаксис, просто возвращайте его не как HTML, а как простой текст.