【问题标题】:Integer not allowed as values for attributes id不允许将整数作为属性 id 的值
【发布时间】:2017-08-24 20:30:12
【问题描述】:

我有一个名为 Test 的 java 类,它有一个属性 Integer id(自动增量)。它被初始化为 1。

在我的 xhtml 文件中,我想为我创建的每一列提供来自 java bean 类的 id。

在另一个名为 AnotherClass 的类(java bean 类)中带有注释:

@ManagedBean(name = "myClass")
@ApplicationScoped

我有一个这个类的测试列表。

这是我尝试做的,但它不能将整数识别为 id 属性的值。在文档中它说只允许使用字符串。我该如何继续?

<c:forEach items="#{myclass.list}" var="test">
    <p:column id="#{test.id}" headerText="#{test.header}">
</c:forEach>

【问题讨论】:

  • 在 html 中,ID 不能以数字开头。 JSF 对此表示敬意...stackoverflow.com/questions/5972433/…
  • 下次也尝试使用简单的普通h:inputText 或其他。如果失败,您知道它与列无关....简化...minimal reproducible example
  • @Kukeltje 我明白了,然后我将编辑标题。所以没有任何方法可以做我想做的事吗?
  • 现在我只是在整数前添加了一个字符:id="t#{test.id}",但这有点难看。

标签: jsp primefaces xhtml


【解决方案1】:

您可以实现一个名为 String getIdAsString() 的方法,然后使用它来代替 id getter:

<c:forEach items="#{myclass.list}" var="test">
    <p:column id="#{test.idAsString}" headerText="#{test.header}">
</c:forEach>

getIdAsString() 方法应该从字母 [a-z|A-Z] 中给出一些前缀,因为 html id 不允许以数字开头。所以实现可能是:

public String getIdAsString() {
  return "id"+id.toString();
}

【讨论】:

  • 我以前试过这个,它说:java.lang.IllegalArgumentException: 2 (2 是 id 的值)
  • @Gatsby 再次检查我的答案
  • @Kukeltje 您从哪里推断出getIdAsString 方法的实现返回了无效的html id?这取决于@Gatsby 他将如何实现它。我没有说他应该(或不)只返回数字。所以你的反对票在某种程度上是不够的。
  • @KrzysztofCichocki 如前所述,您的解决方案不起作用,但无论如何谢谢。
  • @Gatsby 请再次检查getIdAsString()的建议实现
猜你喜欢
  • 2014-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多