【问题标题】:JSF issue about space关于空间的 JSF 问题
【发布时间】:2011-09-27 07:06:47
【问题描述】:

我是JSF中的一只绿鸟,现在被它的文字迷惑了。

当我给outputText赋值多空格时,IE中显示的结果只有一个空格。

ex: 代码是这样的

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

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

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

【问题讨论】:

  • 右击页面和查看源代码。空间仍然存在。这只是浏览器(应该)解释 HTML 的方式。

标签: jsf


【解决方案1】:

此行为由 HTML 规范定义:

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

请注意,如果您使用的是 XHTML,attributescode point U+000C 的处理方式会有所不同。

对于大多数文本,空白序列的呈现与单个空格没有任何不同。


由于这是用于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>

然后您可以将其添加到您的输出控件中:

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

此代码使用 JSF 1.1 和 UTF-8 编码的 JSP 2.0 视图进行了测试。请注意,使用不间断空格将禁止换行。

【讨论】:

  • 有什么方法可以避免这种情况吗?因为我想获取我们输入的完整字符串而不是格式化的字符串
  • 您也可以使用&amp;nbsp; 作为空格。多次使用时不会崩溃。
  • 情况是,我需要验证输入字符串并重新渲染 inputText。如果输入字符串包含多个空格,则验证后显示为一个空格。所以 &nbsp 不能在这里工作。
  • 我已经尝试了
     元素和 CSS 空白,但在  标签上没有任何效果...
  • 没有办法避免这种情况。这是特定于 HTML 的。没有办法让它在 textarea 以外的输入元素上工作。您可能希望使用带有 1 行的 &lt;h:inputTextarea&gt; 和一些阻止 [Enter] 键的 JavaScript 和一些 CSS 来隐藏滚动条。没有真正针对 JSF 的解决方案(因为这是纯 HTML 问题)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多