Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于空间的JSF问题_Jsf - Fatal编程技术网

关于空间的JSF问题

关于空间的JSF问题,jsf,Jsf,我是JSF中的一只绿鸟,现在我对它的文本感到困惑 当我用多个空格指定outputText的值时,IE中显示的结果只有一个空格 代码是这样的 <h:outputText id="name" value="aa (multi-spaces here) bbb" ></h:outputText> IE中显示的结果文本为“aa bbb” 有人能告诉我为什么空格消失得无影无踪吗?此行为由HTML规范定义: 对于除PRE之外的所有HTML元素,空格序列都是独立的“单词”(我们

我是JSF中的一只绿鸟,现在我对它的文本感到困惑

当我用多个空格指定outputText的值时,IE中显示的结果只有一个空格

代码是这样的

<h:outputText id="name" value="aa (multi-spaces here)  bbb" ></h:outputText>

IE中显示的结果文本为“aa bbb”


有人能告诉我为什么空格消失得无影无踪吗?

此行为由HTML规范定义:

对于除
PRE
之外的所有HTML元素,空格序列都是独立的“单词”(我们在这里使用术语“单词”来表示“非空格字符序列”)。格式化文本时,用户代理应识别这些单词,并根据特定书面语言(脚本)和目标媒体的约定进行布局

请注意,如果您使用的是XHTML,则在处理和的方式上存在一些差异

对于大多数文本,空格序列的渲染与单个空格没有任何不同


由于这是针对
outputText
控件的,因此可以使用单向转换器实现无中断空间解决方案:

package myconverters;
// imports

public class SpacePreserver implements Converter {
  private static final char NO_BREAK_SPACE = '\u00A0';

  public String getAsString(FacesContext context, UIComponent component,
      Object value) {
    if (component instanceof EditableValueHolder) {
      throw new IllegalArgumentException(
          "Cannot use SpacePreserver converter on editable controls.");
    }
    return value == null ? null : value.toString().replace(' ', NO_BREAK_SPACE);
  }

  public Object getAsObject(FacesContext context, UIComponent component,
      String value) {
    throw new UnsupportedOperationException("Output converter only");
  }
}
可以使用faces-config.xml条目定义(以及其他方式):

<converter>
  <converter-id>spacePreserver</converter-id>
  <converter-class>myconverters.SpacePreserver</converter-class>
</converter>

太空保护者
myconverters.SpacePreserver
然后,您可以将其添加到输出控件:

<h:outputText id="text1" value="a   b c" converter="spacePreserver" />


该代码使用JSF1.1和UTF-8编码的JSP2.0视图进行了测试。请注意,使用不间断空间将禁止换行。

有什么方法可以避免这种情况?因为我想得到我们键入的完整字符串,而不是格式化字符串,所以您也可以使用
作为空白。这不会在多次使用时崩溃。情况是,我需要验证输入字符串并重新输入inputText。如果输入字符串包含多个空格,则验证后将显示为一个空格。所以这里不行。我已经尝试了元素和CSS空白,但是标签上没有任何效果……这是无法避免的。这是特定于HTML的。除了textarea之外,没有办法让它在输入元素上工作。您可能希望使用一个带有一行的
,一些JavaScript阻止[Enter]键,一些CSS隐藏滚动条。实际上并没有特定于JSF的解决方案(因为这是一个纯粹的HTML问题)。空间仍然存在。这正是浏览器解释HTML的方式。