我已经包裹到我自己的面孔组件中。现在我们发现,当添加几条消息时,扩展的范围会将实际的页面组件移动到页面的最底部。
改变我们在这个系统上的 300 页是不可行的。试图找到<h:messages>
通过 CSS 限制高度的方法,但没有成功。
好的一面是,当向当前面孔上下文添加消息时,调用者需要使用超类中的方法。我能够限制消息,但是重新加载页面时我的控制变量没有重置。
我的问题,有没有其他方法可以限制来自面孔上下文的消息?
(使用 javaEE5、JSF 1.1、tomcat5)
我已经包裹到我自己的面孔组件中。现在我们发现,当添加几条消息时,扩展的范围会将实际的页面组件移动到页面的最底部。
改变我们在这个系统上的 300 页是不可行的。试图找到<h:messages>
通过 CSS 限制高度的方法,但没有成功。
好的一面是,当向当前面孔上下文添加消息时,调用者需要使用超类中的方法。我能够限制消息,但是重新加载页面时我的控制变量没有重置。
我的问题,有没有其他方法可以限制来自面孔上下文的消息?
(使用 javaEE5、JSF 1.1、tomcat5)
默认情况下h:messages
呈现一个无序列表 ( <ul><li>
)。因此,要使用 CSS 限制高度,您需要在元素上设置固定高度<ul>
并在 y 轴上应用溢出,以便用户仍然能够滚动它。
基本上:
.messages {
height: 100px;
overflow-y: scroll;
}
使用styleClass
属性应用它:
<h:messages styleClass="messages" />
这是我为解决该问题所做的工作。正如我在原始帖子中所说,我使用的组件是包装好的。我覆盖了 encodeBegin 和 encodeEnd 以用 div 元素包装原始 h:messages:
import java.io.IOException;
import javax.faces.component.UIComponent;
import javax.faces.component.html.HtmlMessages;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.el.ValueBinding;
public class UIMessages extends HtmlMessages implements LayoutComponent {
public void encodeBegin(FacesContext context) throws IOException{
ResponseWriter writer = context.getResponseWriter();
layout.startRow(writer);
layout.startData(writer);
writer.startElement("div", this);
writer.writeAttribute("style", "overflow:auto; border:0px solid; max-height:100px;", null);
super.encodeBegin(context);
}
public void encodeEnd(FacesContext context) throws IOException{
ResponseWriter writer = context.getResponseWriter();
super.encodeEnd(context);
writer.endElement("div");
layout.endData(writer);
layout.endRow(writer);
}
}