4

我注意到,在我们的表单上,输入字段p:inputTextp:inputTextarea其他小部件(例如p:select*p:commandButton. 我们的表格由 ap:panelGrid 包围。

这是一个测试页面:

<?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:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui">

    <h:head>
        <title>
            D E B U G
        </title>
    </h:head>

    <h:body>

        <h:form>

            <p:panelGrid columns="2">

                <p:outputLabel value="ID:" />
                <p:inputText style="width: 100%;" />

                <h:outputText />
                <p:commandButton value="all = width: 100%" style="width: 100%;" />

                <p:outputLabel value="Status:" />
                <p:selectOneMenu style="width: 100%;">
                    <f:selectItem itemLabel="Status A" itemValue="1" />
                    <f:selectItem itemLabel="Status B" itemValue="2" />
                    <f:selectItem itemLabel="Status C" itemValue="3" />
                </p:selectOneMenu>

                <p:outputLabel value="Remarks:" />
                <p:inputTextarea rows="6" style="width: 100%;" />

            </p:panelGrid>

            <br />

            <p:panelGrid columns="2">

                <p:outputLabel value="ID:" />
                <p:inputText style="width: 300px;" />

                <h:outputText />
                <p:commandButton value="all = width: 300px" style="width: 300px;" />

                <p:outputLabel value="Status:" />
                <p:selectOneMenu style="width: 300px;">
                    <f:selectItem itemLabel="Status A" itemValue="1" />
                    <f:selectItem itemLabel="Status B" itemValue="2" />
                    <f:selectItem itemLabel="Status C" itemValue="3" />
                </p:selectOneMenu>

                <p:outputLabel value="Remarks:" />
                <p:inputTextarea rows="6" style="width: 300px;" />

            </p:panelGrid>
        </h:form>        

    </h:body>

</html>

在 Firefox 上看起来像这样:

在此处输入图像描述

在 IE 9(IE 8 模式)上看起来像这样:

在此处输入图像描述

对于百分比宽度<p:inputText style="width: 100%;" /> ,组件被渲染得稍微太宽。这似乎同样适用于绝对宽度<p:inputText style="width: 300px;" />

我发现 PrimeFaces CSS 附带

.ui-inputfield {
    font-weight: normal;
    margin: 0;
    outline: medium none;
    padding: 4px;
}

,其中删除填充会导致正确的宽度。但是,填充用于输入的文本插入。覆盖 CSS 选择器并没有真正起作用。

你如何修复p:inputTextand p:inputText?你如何最好地调整这一点?使用自定义 PrimeFaces 渲染器?

附录:

我查看了源代码,但找不到可以更改的地方(InputRenderer 类?)。任何关于在哪里看的提示都表示赞赏(在评论中!)。

请注意,p:calendar组件似乎显示了正确的大小(但仅适用于百分比宽度)。PrimeFaces 似乎在这里有问题。

4

2 回答 2

1

这是正常行为,您已经发现了原因。由于您选择的主题中有填充。

这样你就可以:

  • 正确调整组件的宽度。inputText 使用 296px 或 selectOneMenu 使用 304px 或任何适合您需要的东西
  • 覆盖给定部分的 css 样式。只需了解如何在给定上下文中覆盖给定类的样式。
  • 最佳解决方案,因为您有特定需求:根据当前主题编写自己的主题(PrimeFaces 文档第 7 节)。
于 2013-01-11T10:06:44.670 回答
0

您可以在primefaces 样式表之后覆盖填充和其他样式。通常这意味着直接在 <h:body> 之后内联/包含样式表:

.ui-inputfield {
    padding: 0;
}
于 2013-09-26T07:03:54.023 回答