我一直在尝试将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让我知道,我会发布它。
答案 0 :(得分:1)
嗯,无论如何,这是一个部分答案。 h:outputLabel
左侧的3个像素是由于Mojarra JSF实现将\n
字符添加到它创建的label
标记正文的开头。我和提交this bug的人一样感到困惑,为什么要这样做。 \n
在显示时会转换为空格,这就是我的3个像素。
我不知道为什么,但我的RichFaces AJAX调用触发的重新渲染会删除这些\n
字符,因此不再显示空格。
作为一种解决方法,我已经明确地在所有标签的前面放置了空格,以便始终显示空格。我很惊讶这不是一个普遍的问题。