使用 JSF 组件的 class 属性代替 styleClass 确实有效,为什么?

问题描述 投票:0回答:1

据我了解,我们需要使用

styleClass=
,因为 JSF 组件不支持仅使用
class=

我最近注意到一些使用

class=
的组件仍然可以正确渲染。作为一个最小的例子,

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">

    <h:head>
        <title>Simple JSF Facelets page</title>
    </h:head>

    <h:body>
       <h:inputText class="wut" anothertag="hi" value="me"/>
    </h:body>

</html>

这会产生

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <link type="text/css" rel="stylesheet" href="/individuallifefaz/javax.faces.resource/theme.css.xhtml?ln=primefaces-aristo"/>
        <title>Simple JSF Facelets page</title></head>
    <body>
        <input type="text" name="j_idt5" value="me" class="wut"/>
    </body>

</html>

为什么这有效?显然,它不仅仅是传递任何未知标签,因为

anothertag
被删除了。

class jsf jsf-2 attributes
1个回答
9
投票

这实际上是由视图技术 Facelets 完成的,而不是由 JSF 组件本身完成的。 Facelets 有一个 class 属性的

alias
,它会自动映射到
styleClass
。这是作为对“设计者友好的 Facelets”中使用的
jsfc
属性支持的一部分而实现的,这应该使这样的事情成为可能:

<input type="text" jsfc="h:inputText" class="foo" />

如果您将 JSF 与不同的视图技术一起使用(尽管到目前为止还没有任何一种技术可以替代 Facelets,并且 JSP 已被弃用),那么无法保证

<h:inputText class>
能够正常工作。

另请参阅:

© www.soinside.com 2019 - 2024. All rights reserved.