1

我已经包裹到我自己的面孔组件中。现在我们发现,当添加几条消息时,扩展的范围会将实际的页面组件移动到页面的最底部。

改变我们在这个系统上的 300 页是不可行的。试图找到<h:messages>通过 CSS 限制高度的方法,但没有成功。

好的一面是,当向当前面孔上下文添加消息时,调用者需要使用超类中的方法。我能够限制消息,但是重新加载页面时我的控制变量没有重置。

我的问题,有没有其他方法可以限制来自面孔上下文的消息?

(使用 javaEE5、JSF 1.1、tomcat5)

4

2 回答 2

2

默认情况下h:messages呈现一个无序列表 ( <ul><li>)。因此,要使用 CSS 限制高度,您需要在元素上设置固定高度<ul>并在 y 轴上应用溢出,以便用户仍然能够滚动它。

基本上:

.messages {
    height: 100px;
    overflow-y: scroll;
}

使用styleClass属性应用它:

<h:messages styleClass="messages" />
于 2010-11-05T13:46:48.523 回答
1

这是我为解决该问题所做的工作。正如我在原始帖子中所说,我使用的组件是包装好的。我覆盖了 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);
  }
}
于 2010-11-05T15:44:50.410 回答