Wicket:从脚本更新的TextField获取输入

时间:2013-07-14 11:38:09

标签: java wicket

我渲染一个TextField。它的值由脚本填充,而不是用户填充。我需要从Java中获取该值,但我通过null

得到textField.getInput();

如何获取该值并在Java代码中使用它?

2 个答案:

答案 0 :(得分:2)

几个月前我遇到了同样的问题。一个问题是,通过javascript设置输入值不会触发“onChange”事件,您可以轻松地使用该事件来获取值。

我实施的解决方案可能不是最简单的解决方案,但它正在发挥作用:

  • 在您的输入中放置一个带有隐藏的ajax提交链接的表单
  • 当您使用javascript填写输入时,也可以使用javascript进行表单提交

HTML:

<html xmlns:wicket="http://wicket.apache.org">
<body>
<div>
    <a href="#" onclick="document.getElementById('input').value = 'test'; document.getElementById('myForm').submit();">fill
        input</a>

    <form wicket:id="form" id="myForm">
        <input type="text" wicket:id="input" id="input"> 
        <a style="visibility: hidden;" wicket:id="submit">submit</a>
    </form>

    <p> Output:
        <wicket:container wicket:id="output"></wicket:container>
    </p>
</div>
</body>
</html>

和相应的java:

public class HomePage extends WebPage {

private String inputValue;

public HomePage(final PageParameters parameters) {
    super(parameters);

    final Label output = new Label("output", new PropertyModel<String>(
            this, "inputValue"));
    output.setOutputMarkupId(true);
    add(output);

    Form form = new Form("form");
    form.add(new AjaxSubmitLink("submit") {
        @Override
        protected void onAfterSubmit(AjaxRequestTarget target, Form<?> form) {
            super.onAfterSubmit(target, form);
            target.add(output);
        }
    });
    add(form);

    form.add(new TextField<String>("input", new PropertyModel<String>(this,
            "inputValue")));
}
}

答案 1 :(得分:1)

说明:

  • TextField获得带有自定义事件的AjaxFormSubmitBehaviour
  • 此事件可以通过javascript触发。我使用jQuery,因为它是由Wicket提供的。

参见代码:

public class Example extends WebPage
{
    public Example(PageParameters pp)
    {
        super(pp);
        final Model<String> m = new Model<String>("");

        Form<Void> f = new Form<Void> ("form");
        TextField<String> textField = new TextField<String>("textField", m, String.class);

        textField.setOutputMarkupId( true );
        textField.setMarkupId( "myuniqueid" );

        textField.add( new AjaxFormSubmitBehavior("customevent")
        {
            protected void onSubmit(AjaxRequestTarget target)
            {
                System.out.println("Model value:"+m.getObject());
                target.add( this.getComponent() );
            }
        } );
        f.add(textField);
        add(f);
    }
}

HTML

<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
    <head>
        <meta charset="utf-8" />
    </head>
    <body>
        <a href="#" onclick="$('#myuniqueid').val('test'); $('#myuniqueid').trigger('customevent');">fill
        input</a>

        <form wicket:id="form">
            <input wicket:id="textField"></input>
        </form>
    </body>
</html>