我总是使用像这样的el表达式;
<h:outputText value="#{bean.value}" escape="true" />;
我无法从输入字段中的xml中逃脱:
<h:inputText value="#{bean.value}" />
有没有办法在facelets中完全转义xml。
例如上下文参数;
<context-param>
<param-name>facelets.ESCAPE_XML</param-name>
<param-value>false</param-value>
</context-param>
答案 0 :(得分:0)
覆盖<h:outputText>
的渲染器,并注释掉它逃脱文本的部分。然后在faces.config.xml
中注册您的渲染器。
当然,这只有在您使用该标签时才有效。如果只输出表达式#{bean.value}
,它将无法工作。
就个人而言,我宁愿不得不添加转义属性。
答案 1 :(得分:0)
没有尝试过,但您可以使用自定义转换器,如下图所示(将\n
转换为<br/>
)
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import org.apache.commons.lang.StringUtils;
public class BreakLineConverter implements Converter {
/**
* No conversion required
*/
public Object getAsObject(FacesContext context, UIComponent component, String value) {
return value;
}
/**
* Converts All \r \n \r\n into break
*/
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (null==value || StringUtils.isEmpty((String)value))
return "";
String val=value.toString();
//This will take care of Windows and *nix based line separators
return val.replaceAll("\r\n", "<br />").replaceAll("\r", "<br />").replaceAll("\n", "<br />");
}
}
在faces-config.xml中注册转换器
<converter>
<description>Converts data to be displayed in web format
</description>
<converter-id>BreakLineConverter</converter-id>
<converter-class>comp.web.converter.BreakLineConverter</converter-class>
</converter>
答案 2 :(得分:0)