我有多个字段,需要使用相同的值类型填充。要找到这些字段的值,需要快速搜索。因此,在每个字段旁边,我正在考虑一个调用简单搜索表单的按钮。所以基本上:
Field 1 [...]
Field 2 [...]
Field 3 [...]
...
[单击[...]
按钮上的理想情况是通过<p:dialog>
在模式窗口中调用搜索表单,以防止不必要的页面导航。在搜索表单中选择该值并且关闭模式窗口时,将设置相应的Field X
值。
因此,简而言之,我希望能够将[...]
按钮拖放到我想要的位置,并以某种方式将[[link拖放到我要填充的字段中。
用于按钮的复合组件:inpbutton.xhtml
<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)); }
xhtml:
<h:inputText value="databean.entry1"/> <X:inpbutton value="databean.entry1"/>
也许您将输入字段和按钮组合在复合组件中。以及用于搜索对话框的bean: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); }