2013-10-25 3 views
0

Я не могу найти метод, который позволяет мне извлекать атрибуты из компонента или, лучше, одного конкретного атрибута. Вот пример:Как получить атрибуты 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); 
    
    } 
    
+0

То, что вы хотите достичь в интерфейсе? Вы хотите расширить вторую «textarea», а затем первый во время набора? –

+0

Итак, я печатаю первый, а высота возрастает от 100 до 150. Я получаю атрибут конечной высоты (150) и устанавливаю вторую высоту textarea до 150. –

+0

как вы получите конечную высоту? через js или через поведение? потому что если вы просто сделаете это с помощью js, вы можете применить скрипт jquery для изменения стиля второй текстовой области, и это все – Apostolos

ответ

0

Мое решение использует 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; 
} 

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

private Textarea textarea1; 
private Textarea textarea2; 

в CTOR:

textarea1 = textarea1(); 
textarea2 = textarea2(); 
add(textarea1); 
add(textarea2); 
+0

Красивая, мне очень нравится то, что вы там сделали, это заставило меня думать другим способом. –

+0

Я только что пробовал это, но думаю, что что-то может отсутствовать. В eclipse, при обновлении textarea2 находится в ошибке, он говорит, что мне нужно создать локальную переменную. Так что я не уверен, как будет обновляться textarea2? –

+0

Да, объявить поля в вашем классе частными TextArea textarea1, textarea2. Обычно на StackOverflow вы не получаете код, готовый скопировать вставку и компилировать, а также идею о том, как это сделать. Это требует некоторой работы по интеграции в ваш код. –

Смежные вопросы