Как получить атрибуты HTML из компонента калитки?

Я не могу найти метод, который позволяет мне извлекать атрибуты из компонента или, точнее, один конкретный атрибут. Вот пример:

  1. У меня есть две текстовые области (компоненты).
  2. Оба расширяются
  3. При вводе первого он автоматически расширяется с помощью Ajax, а высота увеличивается.
  4. Я получаю атрибут высоты из первой текстовой области
  5. Я установил высоту второй текстовой области на высоту, которую я получил от первой.

     public class HomePage extends WebPage {
    
     TextArea t = new TextArea("m", "hey");;
    
    TextArea t2 = new TextArea("m2",
        "this is a label with label ones attributes added");
    
    public HomePage() {
    
    add(t.add(new AttributeModifier("height", "100;")));
    
    
    add(t2.add(HERE ADD THE ATTRIBUE HEIGHT FROM LABEL);
    
    }
    

1 ответ

Решение

Мое решение использует JavaScript для изменения высоты. t1 - это то, что при наборе текста увеличивается, t2 - это то, которое регулируется по высоте. Чисто и красиво, я думаю.

private TextArea textarea1() {
    TextArea t1 = new TextArea("t1", Model.of("t1"));
    final String js = "document.getElementById('%s').style.height = document.getElementById('%s').style.height;";
    t1.add(new OnChangeAjaxBehavior() {

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            target.appendJavaScript(String.format(js, textarea2.getMarkupId(), textarea1.getMarkupId()));
        }
    });
    t1.setOutputMarkupId(true);
    return t1;
}

private TextArea textarea2() {
    TextArea t2 = new TextArea("t2", Model.of("t2"));
    t2.setOutputMarkupId(true);
    return t2;
}

Ранее в классе вашей страницы / панели объявите приватные поля и присвойте им два текстовых поля.

private Textarea textarea1;
private Textarea textarea2;

в ctor:

textarea1 = textarea1();
textarea2 = textarea2();
add(textarea1);
add(textarea2);
Другие вопросы по тегам