如何以编程方式将ajax与Primefaces组件一起使用

时间:2018-11-26 12:26:08

标签: jsf primefaces

我正在尝试以编程方式创建Primefaces UIComponents,并且某种程度上我无法将数据获取到Backing Bean。不确定是Ajax还是我为InputText设置的值。 我要以编程方式编写的代码:

<p:inputText id="id_test" value="#{myBean.value}">
    <p:ajax />
</p:inputText>

这是我尝试解决问题的方法:

private String value; // Getter&Setter


public void buildComponent(){
    FacesContext fc = FacesContext.getCurrentInstance();
    Application ap = fc.getApplication();

    InputText inputText = (InputText) ap.createComponent(fc, "org.primefaces.component.InputText", "org.primefaces.component.InputTextRenderer")
    inputText.setValue(value);
    inputText.setId("id_test");

    AjaxBehavior ajaxBehavior = (AjaxBehavior) ap.createBehavior(AjaxBehavior.BEHAVIOR_ID);
    inputText.addClientBehavior(inputText.getDefaultEventName(), behavior);
}

2 个答案:

答案 0 :(得分:2)

您将需要创建一个可以解析为bean属性的ValueExpression。动态输入还应该如何知道将输入值发送到哪里?

代替:

inputText.setValue(value);

执行以下操作:

ExpressionFactory expressionFactory = FacesContext.getCurrentInstance()
  .getApplication().getExpressionFactory();
ValueExpression veBinding = expressionFactory.createValueExpression("#{myBean.value}", String.class);
inputText.setValueExpression("value", veBinding);

答案 1 :(得分:1)

我不确定您打算做什么,但是最好动态地渲染该组件而不是创建它。像这样:

<p:inputText id="id_test" value="#{myBean.value}" rendered="#{myBean.isSomeCondition">
    <p:ajax />
</p:inputText>  

<p:inputText id="id_test" value="#{myBean.value}" rendered="#{myBean.value != 'whatever'">
    <p:ajax />
</p:inputText>  
相关问题