2013-10-25 24 views
0

我找不到一种方法可以让我从组件或更好的属性中提取属性。这里是一个例子:如何从一个wicket组件获取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脚本来改变第二个textarea的风格,就是这样吧 – 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; 

在构造函数:

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

美丽的,我真的很喜欢你在那里做的,这让我以不同的(更好的)方式思考。 –

+0

我刚刚尝试过,但我认为可能会丢失一些东西。在eclipse中,在更新textarea2时出错了,它说我需要创建一个局部变量。所以我不确定textarea2会如何更新? –

+0

是的,在你的类中声明字段private TextArea textarea1,textarea2。通常在StackOverflow上,你没有准备好复制粘贴和编译的代码,只是一个想法应该如何完成。它需要一些工作来集成到你的代码中。 –