0

autoComplete Textfield の入力をクリアする際に問題が発生しています。なんらかの理由で target.add(reference to AutoCompleteTextField); を呼び出すたびに。

入力値が null です...

したがって、基本的には、入力が格納されている参照文字列をクリアできますが、ajaxupdate を呼び出すたびに null になります。

ajaxButton と AjaxSubmitLink の両方を試しました。どちらも同じ反応を示します。textField からの入力を送信するボタンがあります。

コード:

        <form wicket:id="autoCompleteForm">
          <td><input wicket:id="autoCompleteTextField" size="20"/></td>
          <td><button width:100px wicket:id="selectRoleBtn">Select</button></td>    
        </form>


private void autoCompleteForm()
{
    findRoleForm = new Form<Void>("autoCompleteForm");
    findRoleForm.setOutputMarkupId(true);
    addOrReplace(findRoleForm);
    field = new AutoCompleteTextField<String>("autoCompleteTextField",
            new PropertyModel<String>(this,"autoString"))
        {
            @Override
            protected Iterator<String> getChoices(String input)
            {
                if (Strings.isEmpty(input))
                {
                    List<String> emptyList = Collections.emptyList();
                    return emptyList.iterator();
                }

                List<String> choices = new ArrayList<String>(10);

                for (final Role role : rolesList)
                {

                    final String roles = role.getRoleName();

                    if (roles.toUpperCase().startsWith(input.toUpperCase()))
                    {
                        choices.add(roles);
                        if (choices.size() == 10)
                        {
                            break;
                        }
                    }
                }

                return choices.iterator();
            }
        };
        findRoleForm.addOrReplace(field);
        findRoleForm.addOrReplace(new AjaxSubmitLink("selectRoleBtn", findRoleForm)
        {
            protected void onSubmit(AjaxRequestTarget target, Form<?> form)
            {
                System.out.println("here1" + autoString);
                if(rolesList  != null && autoString!= null)
                {
                    if(rolesList .size() != 0)
                    {   
                        for(int i=0; i < rolesList .size(); i++)
                        {
                            System.out.println("here2" + autoString);
                            if(rolesList .get(i).getRoleName().equals(autoString))
                            {
                                role = rolesList.get(i);

                                roleInformation.addOrReplace(new Label("roleNameTxt", role.getRoleName()));
                                roleInformation.addOrReplace(new Label("roleAliasTxt", role.getRoleAlias()));
                                roleInformation.addOrReplace(new Label("roleOwnerTxt", role.getRoleOwnerId()));
                                roleInformation.addOrReplace(new Label("roleStatusTxt", role.getRoleAccessStatus()));
                                roleInformation.addOrReplace(new Label("roleCategoryTxt", role.getRoleCategoryName()));
                                roleInformation.addOrReplace(new Label("roleDescriptionTxt", role.getRoleDescription()));
                                roleInformation.addOrReplace(new Label("roleValidityTxt", role.getRoleValidityStatus()));
                                roleInformation.addOrReplace(new Label("roleNumUsers", ""));


                                //add adOrReplace(findRoleForm);
                                autoString = "";
                                target.add(field);
                                target.add(roleInformation);
                                currentRoleSelection = null;
                                target.add(rolesDropDownChoice);
                                break;
                            }
                        }
                    }
               }
            }
        }).add(getIndicatorAppender());
}

編集: autoCompleteTextField 入力フィールドは最初はクリアされますが、もう一度試すとクリアされます。文字列: autoString は null になります。したがって、最初の試行で (提供された検索リストから) 選択を選択し、選択ボタンを押すと、正しい文字列が表示されてクリアされます。ただし、指定された値を選択してもう一度実行すると、「autoString」はnullになり、それに割り当てられた入力値が取得されません。

4

2 に答える 2

0

あなたの問題をもっと適切に説明できますか?

コンパイルするにはコードを変更する必要がありました

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteTextField;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.util.string.Strings;

public class AutoTestPage2 extends WebPage {

    Form<Void> findRoleForm;
    AutoCompleteTextField field;
    List<Role> rolesList = new LinkedList<AutoTestPage2.Role>();
    String autoString;

    public AutoTestPage2() {
        super();
        autoCompleteForm();
    }

    private void autoCompleteForm() {
        rolesList.add(new Role("Adam"));
        rolesList.add(new Role("Boris"));
        rolesList.add(new Role("Clair"));

        findRoleForm = new Form<Void>("autoCompleteForm");
        findRoleForm.setOutputMarkupId(true);
        add(findRoleForm);
        field = new AutoCompleteTextField<String>("autoCompleteTextField",
                new PropertyModel<String>(this, "autoString")) {
            @Override
            protected Iterator<String> getChoices(final String input) {
                if (Strings.isEmpty(input)) {
                    final List<String> emptyList = Collections.emptyList();
                    return emptyList.iterator();
                }

                final List<String> choices = new ArrayList<String>(10);

                for (final Role role : rolesList) {

                    final String roles = role.getName();

                    if (roles.toUpperCase().startsWith(input.toUpperCase())) {
                        choices.add(roles);
                        if (choices.size() == 10) {
                            break;
                        }
                    }
                }

                return choices.iterator();
            }
        };
        findRoleForm.addOrReplace(field);
        findRoleForm.addOrReplace(new AjaxSubmitLink("selectRoleBtn", findRoleForm) {
            @Override
            protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
                System.out.println("here1" + autoString);
                if (rolesList != null && autoString != null) {
                    if (rolesList.size() != 0) {
                        for (int i = 0; i < rolesList.size(); i++) {
                            System.out.println("here2" + autoString);
                            if (rolesList.get(i).getName().equals(autoString)) {
                                final Role role = rolesList.get(i);

                                //                                roleInformation.addOrReplace(new Label("roleNameTxt", role.getName()));

                                //add adOrReplace(findRoleForm);
                                autoString = "";
                                target.add(field);
                                //                                target.add(roleInformation);
                                //                                currentRoleSelection = null;
                                //                                target.add(rolesDropDownChoice);
                                break;
                            }
                        }
                    }
                }
            }
        })/* .add(getIndicatorAppender()) */;

        //        add(findRoleForm);
    }

    class Role implements Serializable {

        String name;

        public Role(final String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }

        public void setName(final String name) {
            this.name = name;
        }

    }
}

選択を押すと、テキストフィールドがクリアされ、コンソールに2つのメッセージが表示されます

here1Adam
here2Adam
于 2013-09-09T16:47:40.570 に答える