1

私は自分の顔のコンポーネントにラップしています。現時点では、複数のメッセージを追加すると、実際のページ コンポーネントがページの一番下に移動するエキスパンドであることがわかりました。

このシステムにある 300 ページを変更することは現実的ではありません。<h:messages>CSSの高さを制限する方法を見つけようとしましたが、成功しませんでした。

明るい面は、現在の Faces コンテキストにメッセージを追加するときに、呼び出し元がスーパー クラスのメソッドを使用する必要があることです。メッセージを制限することはできましたが、ページをリロードしても制御変数がリセットされません。

私の質問は、顔のコンテキストからのメッセージを制限する他の方法はありますか?

(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を上書きして、元のh:messagesを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);
  }
}
于 2010-11-05T15:44:50.410 に答える