动态实例化PF 3.4.2自动完成组件时,我遇到了一个问题。组件最初呈现ok,部分处理时刷新其值,但从不显示建议。
我通过以下方式实例化此控件:
AutoComplete ac = (AutoComplete) context.getApplication().createComponent(AutoComplete.COMPONENT_TYPE);
final String varName = "p";
ValueExpression ve = JSFUtils.createValueExpression("#{minContext.selected.sen}"), Sen.Type);
ac.setValueExpression("value", ve);
ac.setForceSelection(true);
ac.setVar(varName);
ValueExpression itemLabel = JSFUtils.createValueExpression("#{sc:senLibelle(p)}"), String.class);
ac.setValueExpression("itemLabel", itemLabel);
ValueExpression itemValue = JSFUtils.createValueExpression("#{" + varName + "}");
ac.setValueExpression("itemValue", itemValue);
MethodExpression completeMethod = JSFUtils.createMethodExpression("#{senUtils.completeAllSens}", List.class,new Class[]{String.class});
ac.setCompleteMethod(completeMethod);
然后使用将其添加到父控件
getChildrens().add(ac);
父组件是PF PanelGrid的派生。我使用这种方法成功地生成了各种版本面板,效果非常好。但我不明白为什么它没有自动完成。
父控件看起来像:
@FacesComponent(SenatDataTableEntryDetail.SENAT_COMPONENT_TYPE)
public class SenatDataTableEntryDetail extends PanelGrid {
/** Leaving renderer unchanged, so that PF renderer for PanelGrid is used.
*/
public static final String SENAT_COMPONENT_FAMILY = "fr.senat.faces.components";
public static final String SENAT_COMPONENT_TYPE = SENAT_COMPONENT_FAMILY + ".SenatDataTableEntryDetail";
private enum PropertyKeys { mapper, bean; }
@Override
public void encodeBegin(FacesContext context) throws IOException {
super.encodeBegin(context);
addDynamicChildren(context);
}
@Override
public boolean getRendersChildren()
{
return true;
}
...
private Boolean isInitialized() {
return (Boolean)getStateHelper().eval(SENAT_INITIALIZED,false);
}
private void setInitialized(Boolean param) {
getStateHelper().put(SENAT_INITIALIZED, param);
}
private void addDynamicChildren(FacesContext context) throws IOException {
if(isInitialized()) {
return;
}
setInitialized(true);
/* components are instiated and added as children only once */
}
}
它只是将子对象添加到面板网格。
自定义组件声明的其他方面(在taglib等中)也可以。
问题似乎并不存在于EL表达式、completeMethod定义等中。如果我在测试xhtml页面中包含具有相同参数的p:autoComplete实例,则它只会按预期工作:
<p:autoComplete value="#{minContext.selected.sen}" forceSelection="true"
var="p" itemLabel="#{sc:senLibelle(p)}" itemValue="#{p}"
completeMethod="#{senUtils.completeAllSens}"/>
我注意到PF自动完成组件有点特殊,因为它在检测到查询时呈现不同。请参阅中的Autocompleterender源代码http://primefaces.googlecode.com/files/primefaces-3.4.2.zip .
在“动态实例化”的情况下,没有调用这个组件的解码方法。我没能找到最后几天的原因,但没有成功。
我期待您对检查什么来纠正这个烦人的“错误”提出建议。
因此,问题在于id的生成(参见两条注释)。
组件实例化的开始是:
AutoComplete ac = (AutoComplete) context.getApplication().createComponent(AutoComplete.COMPONENT_TYPE);
ac.setParent(this);
ac.setId(...some application specific unique id generation...);
final String varName = "p";
通过这种方式,在生成客户端id时适当考虑了命名容器。
我试图创建自己的自定义angular material组件,该组件能够使用控件。 除此之外,我希望该控件使用指令。 我的目的只是创建一个更好看的组件,该组件包含一个集成的clear按钮和自定义css箭头,如下图所示。我使用标准组件成功地获得了它,并添加了我想要的内容,但现在我想将它导出到泛型组件中。 null 即使正确选择了值,我的窗体也无效。 选择某个选项后,占位符自身设置不正确。 自动完成筛选
我试图得到一个自动完成列表弹出,使用此链接作为指导。 我得到的错误消息: w/filter:performFiltering()期间发生异常!java.lang.nullPointerException:collection==null at java.util.ArrayList.(arrayList.java:94)at android.widget.arrayAdapter$arrayFil
我正在使用primefaces AutoMLETE强制选择按名称搜索帐户 JSF组件 Bean方法: 这工作正常,现在如果我想把搜索更改为在查询值中搜索账号。我使用了以下内容: 但是,过滤器只返回搜索号码,而忽略名称搜索。我怎样才能做到这一点?
本文向大家介绍Vue结合原生js实现自定义组件自动生成示例,包括了Vue结合原生js实现自定义组件自动生成示例的使用技巧和注意事项,需要的朋友参考一下 就目前三大前端主流数据驱动框架(vue,ng,react)而言,均具有创建自定义组件的api,但都是必须先做到事先写好挂载点,这个挂载点可以是原有静态元素标签也可以是自定义模板;对于多种组件通过同一数据流生成的,如果事先在页面上写好挂载点(moun
我正在编写一组定制的PrimeFaces组件,使用PrimeFaces5.0,并在JBoss EAP6.2中运行。 null 2.2在myFaceStest.taglib.xml中,我定义了输入标记: 2.3在input.java(我的自定义组件)中,我执行以下操作: 2.4此组件的呈现器包含以下内容: 给定这种设置,为什么自定义组件不会呈现?我的jboss日志中没有任何内容,即使日志级别设置为d
我不确定这是否可能。。。但是我想使用autoComplete组件,其中value属性是String类型,completeMethod返回一些重对象的列表。 我还需要使用 这是我认为应该起作用的(但没有): 这是返回建议列表的方法: 如果用户选择一个建议,它会将itemValue设置为所选建议的名称,但会显示Demandeur对象中包含两个值的串联字符串。 建议确实会出现,我可以选择它们,但不幸的是