Как получить атрибуты HTML из компонента калитки?
Я не могу найти метод, который позволяет мне извлекать атрибуты из компонента или, точнее, один конкретный атрибут. Вот пример:
- У меня есть две текстовые области (компоненты).
- Оба расширяются
- При вводе первого он автоматически расширяется с помощью Ajax, а высота увеличивается.
- Я получаю атрибут высоты из первой текстовой области
Я установил высоту второй текстовой области на высоту, которую я получил от первой.
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);