如何从wicket组件中获取HTML属性?

时间:2013-10-25 08:50:30

标签: wicket

我找不到一种允许我从组件或更好的一个特定属性中提取属性的方法。这是一个例子:

  1. 我有两个文本区域(组件)。
  2. 两者都可扩展
  3. 输入第一个时,它会随着Ajax自动扩展,并且高度会增加。
  4. 我从第一个文本区域获取了height属性
  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 个答案:

答案 0 :(得分: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);