0

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

  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);
    
    }
    
4

1 回答 1

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;
}

在您的页面/面板类的早些时候声明私有字段并将它们分配给两个文本区域

private Textarea textarea1;
private Textarea textarea2;

在 ctor 中:

textarea1 = textarea1();
textarea2 = textarea2();
add(textarea1);
add(textarea2);
于 2013-10-26T11:11:02.010 回答