h:outputLabel的长度在RichFaces AJAX调用之后发生变化

时间:2011-05-16 00:16:25

标签: jsf richfaces ajax4jsf

我一直在尝试将RichFaces合并到一个更复杂的页面中,以使其通过AJAX更顺畅地运行。一切都工作正常,它已经解决了我使用普通表格帖子的一些问题,所以我真的想保留它。在我的方式中唯一的问题是,在按下a4j:commandButton之后,我的大多数h:outputLabel被缩短了3个像素(这些像素位于文本的左侧,这是因为左侧填充,边距不常见和边框宽度都是0px)。这导致我的许多控件稍微移动,看起来非常不专业。在我看来,重新渲染比初始渲染做得更准确。以下是我页面的相关部分:

<a4j:form id="mainForm">
    ...
    <fieldset id="illustrationDetails">
        <h:outputLabel for="product" value="Product" />
        <h:selectOneMenu id="product" value="#{illustrationManager.illustration.product}" valueChangeListener="#{illustrationManager.illustration.setProduct}" onchange="submit()">
            <f:selectItems value="#{illustrationManager.illustration.products}" />
        </h:selectOneMenu>
        <h:outputLabel for="paymentFrequency" value="Payment" />
        <h:selectOneMenu id="paymentFrequency" value="#{illustrationManager.illustration.paymentFrequency}">
            <f:selectItems value="#{illustrationManager.illustration.paymentFrequencies}" />
        </h:selectOneMenu>
        <h:outputLabel for="expenseGroup" value="Expense Group" />
        <h:selectOneMenu id="expenseGroup" value="#{illustrationManager.illustration.expenseGroupId}">
            <f:selectItems value="#{illustrationManager.illustration.expenseGroups}" />
        </h:selectOneMenu>
    </fieldset>
    ...
    <a4j:commandButton id="calculateButton" value="Calculate" action="#{illustrationManager.calculatePremium()}" ajaxSingle="true" reRender="mainForm" />
    ...
</a4j:form>

在上面的字段集中,除第一个标签外的所有标签都出现此问题。第一个标签通过初始渲染呈现我认为正确的(左边没有像素),因此重新渲染不会改变。

欢迎任何建议!此外,如果你想要更多信息,比如相关控件的css让我知道,我会发布它。

1 个答案:

答案 0 :(得分:1)

嗯,无论如何,这是一个部分答案。 h:outputLabel左侧的3个像素是由于Mojarra JSF实现将\n字符添加到它创建的label标记正文的开头。我和提交this bug的人一样感到困惑,为什么要这样做。 \n在显示时会转换为空格,这就是我的3个像素。

我不知道为什么,但我的RichFaces AJAX调用触发的重新渲染会删除这些\n字符,因此不再显示空格。

作为一种解决方法,我已经明确地在所有标签的前面放置了空格,以便始终显示空格。我很惊讶这不是一个普遍的问题。