Несколько полей, заполненных одной и той же формой поиска - PullRequest
0 голосов
/ 27 января 2020

У меня есть несколько полей, которые должны быть заполнены одним и тем же типом значения. Поиск значения в этих полях требует быстрого поиска. Поэтому рядом с каждым полем я думаю о кнопке, вызывающей простую форму поиска. Итак, в основном:

Field 1 [...]
Field 2 [...]
Field 3 [...]
...

Нажатие на кнопку [...] в идеальном случае вызывает форму поиска в модальном окне через <p:dialog>, чтобы предотвратить ненужную навигацию по страницам. Когда значение выбирается в форме поиска и модальное окно закрывается, устанавливается соответствующее значение Field X.

Короче говоря, я хотел бы иметь возможность отбросить эту кнопку [...] куда угодно и как-нибудь связать ее с полем, которое я хочу заполнить.

Как я могу это сделать? Насколько я знаю, инъекция бобов не может с этим работать. Я просто не знаю с чего начать.

1 Ответ

0 голосов
/ 28 января 2020

Я сделал нечто похожее на это:

Составной компонент для вашей кнопки: inpbutton.x html

<composite:interface componentType="inpbutton">
    <composite:attribute name="value"     type="java.lang.Object"/>

...
<composite:implementation>
    <h:commandButton value="..." actionListener="#{cc.action()}"/>

Соответствующий класс: Inpbutton. java

@FacesComponent("inpbutton")
public class Inpbutton extends UIInput implements NamingContainer {

    public void action() {
        ValueExpression vx = getValueExpression("value");
        getBean(InpDialog.class).openDialog(vx);
    }
}

// static utilities from elsewhere

@SuppressWarnings({"unchecked"})
public static <T> T uncheckedCast(Object obj) {
        return (T) obj;
}
public static <T> T getBean(Class<T> cls) {
    BeanManager bm = CDI.current().getBeanManager();
    Bean<T> bean = uncheckedCast(bm.getBeans(cls).iterator().next());
    CreationalContext<T> ctx = bm.createCreationalContext(bean);
    return uncheckedCast(bm.getReference(bean, cls, ctx));
}

x html:

<h:inputText value="databean.entry1"/>
<X:inpbutton value="databean.entry1"/>

может быть, вы объедините поле ввода и кнопку в составном компоненте.

И компонент для диалога поиска : InpDialog. java

ValueExpression vx = null;

public void openDialog(ValueExpression val) {
    vx = val;
    // open the modal dialog with button -> dialogWorker()
}

public void dialogWorker() {
     // do the stuff

     // set the field X value
     if(vx!=null)
         vx.setValue(theResult);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...