2

我渲染一个TextField。它的值由脚本填充,而不是用户。我需要从 Java 中获取该值,但我null通过做得到textField.getInput();

任何想法如何获得该值并在 Java 代码中使用它?

4

2 回答 2

3

几个月前我遇到了同样的问题。一个问题是,通过 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")));
}
}
于 2013-07-14T20:39:59.817 回答
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>
于 2013-07-24T08:00:13.210 回答