复合组件和 PanelGrid 的布局问题 [重复]

Posted

技术标签:

【中文标题】复合组件和 PanelGrid 的布局问题 [重复]【英文标题】:Layout problems with composite components and PanelGrid [duplicate] 【发布时间】:2012-12-09 23:50:17 【问题描述】:

可能重复:How to make a grid of JSF composite component?

我有一个<p:panelGrid>,其中有一列用于生成页眉和页脚。

文字是葡萄牙语,上面写着“字段放置在此处!PS:在第二面板内”。

<p:panelGrid> 中,我有一个嵌套的<h:panelGrid>,它应该包含这些字段。我创建了一个复合组件来添加标签和输入字段。这是复合实现:

<cc:implementation>
    <h:panelGrid columns="2">
        <p:outputLabel for="#cc.attrs.fieldId" value="#cc.attrs.fieldLabel"/>
        <p:inputText id="#cc.attrs.fieldId" required="#cc.attrs.required" disabled="#cc.attrs.disabled" 
            value="#cc.attrs.targetValue" styleClass="cc.attrs.styleClass">
            <cc:insertChildren /> <!-- Validation Rules -->
            <f:ajax event="blur" execute="@this" render="@this" />
        </p:inputText>      
    </h:panelGrid>          
</cc:implementation>

这应该在网格中对齐标签和输入。但是,它呈现如下:

我尝试从复合组件中删除 &lt;h:panelGrid&gt;,但它看起来也像这样未对齐:

如何对齐标签和输入?

【问题讨论】:

【参考方案1】:

表单布局从头开始是一件非常困难的事情,而且并不总是那么简单。话虽如此,您可以尝试使用一些 CSS 使其工作,为所有标签设置相同的宽度,然后使表单控件浮动到右侧。

在此处查看此技术和其他技术的一些示例:http://jeffhowden.com/code/css/forms/

另一个可能感兴趣的是Twitter Bootstrap 库/框架。 如果需要,您可以customize it 仅获取基本布局和表单所需的 CSS。

【讨论】:

感谢您的回答。但我的方法有点不同。我会发的。【参考方案2】:

这是我所做的:

我的复合组件不呈现标签,这样,我在每个组件内都没有 panelGrid。结果是这样的:

<cc:implementation>
    <p:inputText id="#cc.attrs.fieldId" required="#cc.attrs.required" disabled="#cc.attrs.disabled" 
                 value="#cc.attrs.targetValue" styleClass="cc.attrs.styleClass">

        <cc:insertChildren /> <!-- Validation Rules -->
        <f:ajax event="blur" execute="@this" render="@this" />

    </p:inputText>      
</cc:implementation>

这样,标签需要有这个:

            <h:panelGrid columns="2" cellspacing="5" styleClass="table_form">  

            <p:outputLabel for="inputId:id" value="#msg['entity.id']"/>
            <po:inputInteiro id="inputId" targetValue="#campoController.entity.id" fieldId="id" disabled="true" styleClass="inputTiny"/>

需要注意,因为如果您不将 ID 提供给复合组件,并尝试仅查找内部 id,JSF 将找不到您的组件。如果您的方法不正确,则会出现以下异常:javax.faces.FacesException: 找不到从“mainForm:j_idt78”引用的标识符为“id”的组件

最终结果是:

另一个注意事项:primefaces 不再在必填字段中包含“*”...需要手动完成...:(

希望这会有所帮助!

【讨论】:

以上是关于复合组件和 PanelGrid 的布局问题 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

jsf 2.0 自定义组件/标签不复合

复合组件参数在ui:repeat var属性时不会计算

如何将多个组件放在h:panelGrid的单个单元格中

对齐 panelGrid 列内的内容

新手JSF问题 - 如何实现这种布局?

JSF 复合组件值和 <c:if> [重复]