Как ограничить высоту компонента JSF <h: messages> - PullRequest
1 голос
/ 05 ноября 2010

Я завернул в свой компонент лица. Прямо сейчас мы обнаружили, что при добавлении нескольких сообщений развертываемые компоненты страницы перемещаются в самое дно страницы.

Невозможно изменить 300 страниц, которые мы имеем в этой системе. Пытался найти способ ограничения высоты <h:messages> с помощью CSS, но безуспешно.

Яркой стороной является то, что при добавлении сообщений в текущий контекст лиц требуется, чтобы вызывающая сторона использовала метод из суперкласса. Мне удалось ограничить количество сообщений, но мои переменные управления не сбрасываются при перезагрузке страницы.

Мой вопрос, есть ли другой способ ограничения контекста сообщений от лиц?

(с использованием javaEE5, JSF 1.1, tomcat5)

Ответы [ 2 ]

2 голосов
/ 05 ноября 2010

h:messages по умолчанию отображает неупорядоченный список (<ul><li>). Таким образом, чтобы ограничить высоту с помощью CSS, вам нужно установить фиксированную высоту для элемента <ul> и применить к нему переполнение по оси Y, чтобы пользователи все еще могли просматривать его.

В основном:

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

Примените его, используя атрибут styleClass:

<h:messages styleClass="messages" />
1 голос
/ 05 ноября 2010

Вот что я сделал, чтобы обойти проблему.Как я уже говорил в моем первоначальном сообщении, используемый мной компонент обернут.Я перезаписал encodeBegin и encodeEnd, чтобы обернуть оригинальные h: сообщения с элементом div:

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);
  }
}
...