1

我将 JSF 与 Primefaces 3.5 一起使用。我使用p:panelGrid不带columns属性的 ,而是使用 and 显式创建行和列p:rowp:column如展示中所示(http://www.primefaces.org/showcase/ui/panelGrid.jsf)。

现在我需要在一些 CSS 类的帮助下为一行设置不同的样式。但是要么我错过了它,要么就是没有办法将一个类添加到一个p:row?!我什至可以设置属性styleClass,但它在渲染输出中被忽略...

有没有办法通过其类以某种方式区分 a 中的一行panelGrid

4

3 回答 3

0

尝试在 css 上使用通配符(计算所有td以你的 id 结尾的)

像这样(选择其 id 以 结尾的所有 td myRowId

tr[id*='myRowId'] {
    color:red 
}

这是一个jsfiddle


上一个答案...

由于您不能使用 styleClass,p:row您可以尝试以下操作

分配p:row一个 id,如下所示:<p:row id="myRowId "

并以下列方式应用样式(在您的 css 文件中)

#myFormId\3A SomeNamingContainer\3A myRowId {
    background-color: red;
}

请查看您页面的源代码,以便将myFormIdand替换为SomeNamingContainer您的真实身份...

另请阅读:如何在 CSS 选择器中使用 JSF 生成的 HTML 元素 ID?

于 2013-07-01T14:20:52.060 回答
0

我不知道为什么styleClass默认情况下会忽略该属性(至少在 PrimeFaces 6.2 版之前),但您可以创建一个自定义渲染器,将其值附加到 HTML 输出。默认 PrimeFaces 渲染器的简单替换如下所示:

public class PanelGridBodyRowRenderer extends CoreRenderer implements HelperRowRenderer {

    @Override
    public void encode(FacesContext context, Row row) throws IOException {
        ResponseWriter writer = context.getResponseWriter();
        String rowStyleClass = PanelGrid.TABLE_ROW_CLASS;
        String userRowStyleClass = row.getStyleClass();
        if (userRowStyleClass != null) {
            rowStyleClass = rowStyleClass + " " + userRowStyleClass;
        }

        writer.startElement("tr", row);
        writer.writeAttribute("class", rowStyleClass, null);
        writer.writeAttribute("role", "row", null);
        renderChildren(context, row);
        writer.endElement("tr");
    }

}

org.primefaces.component.row.renderer对于 PrimeFaces 6.2 版,您可以简单地在 WAR的包中创建此渲染器类。然后,类加载器将加载您的渲染器,而不是 PrimFaces JAR 中的相同渲染器类。

有关自定义组件和渲染器的更多信息,请参阅答案。

于 2019-03-06T11:33:37.403 回答
-1

如果您在其他行中需要相同的样式,也许您可​​以使用列样式p:column(根据您对 Daniel 的回复)。像这样的东西:

.stylePerColumn {
    background-color: #F22626;
    color: black;
    border-style: none !important;
}

并 int xhtml 文件<p:column styleClass="stylePerColumn ">...</p:column>(到所需的每一列)。

于 2013-07-01T16:52:59.507 回答