我正在使用internet-explorer 8和jsf。 我制作了我的自定义转换器,在两个空格后添加“\ n”(打破太长的字符串)。正在调用转换器并返回正确的值(我用调试器检查它),但不幸的是,这个正确的值没有显示在页面上。这是xhtml代码:
<h:commandLink action="#{bean.sort(property)}"
style="margin-left:0.01px;margin-right:0.01px;white-space:nowrap;">
<h:outputText value="#{header}">
<f:converter converterId="headerConverter" />
</h:outputText>
</h:commandLink>
转换器代码:
public class HeaderConverter implements Converter {
public HeaderConverter() {
}
public Object getAsObject(FacesContext context, UIComponent component, String value) {
/* Converter tylko do wyświetlania */
throw new RuntimeException("HeaderConverter - display only");
}
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value instanceof String) {
int i = 0;
int spaceIter = 0;
String header = (String) value;
String afterChange = header;
for (char c : header.toCharArray()) {
if (Character.isWhitespace(c)) {
spaceIter++;
if(spaceIter == 2) {
afterChange = "" + header.substring(0, i) + "\n" + header.substring(i+1);
}
}
i++;
}
return afterChange;
}
return null;
}
} 当然,我已经在faces-config.xml上修改了所有内容 提前感谢您的所有努力。
答案 0 :(得分:2)
JSF在这个问题的上下文中只是一个HTML代码生成器。在HTML中,换行符由<br>
元素表示,而不是由\n
字符表示。
如果您右键单击webbrowser中的页面并执行查看源,那么您将看到\n
实际上已将其添加到生成的HTML输出中,但是根本没有参与HTML演示文稿/格式化。
所以,你有两个选择:
使用<br>
代替\n
。
... + "<br/>" + ...
您只需要关闭XML转义。
<h:outputText ... escape="false" />
当您重新显示用户控制的输入时,请注意潜在的XSS攻击漏洞!
指示webbrowser将\n
解释为格式化的一部分而不是标记(默认情况下)。您可以使用CSS white-space: pre
。
style="white-space: pre;"