如何以编程方式将 ajax 与 Primefaces 组件一起使用
How to use ajax with Primefaces components programmatically
我正在尝试以编程方式创建 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);
}
我不确定您打算做什么,但动态呈现组件而不是创建组件可能更好。类似的东西:
<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>
您将需要创建一个解析为您的 bean 属性 的 ValueExpression。您的动态输入还应该如何知道将输入值发送到哪里?
而不是:
inputText.setValue(value);
这样做:
ExpressionFactory expressionFactory = FacesContext.getCurrentInstance()
.getApplication().getExpressionFactory();
ValueExpression veBinding = expressionFactory.createValueExpression("#{myBean.value}", String.class);
inputText.setValueExpression("value", veBinding);
我正在尝试以编程方式创建 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);
}
我不确定您打算做什么,但动态呈现组件而不是创建组件可能更好。类似的东西:
<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>
您将需要创建一个解析为您的 bean 属性 的 ValueExpression。您的动态输入还应该如何知道将输入值发送到哪里?
而不是:
inputText.setValue(value);
这样做:
ExpressionFactory expressionFactory = FacesContext.getCurrentInstance()
.getApplication().getExpressionFactory();
ValueExpression veBinding = expressionFactory.createValueExpression("#{myBean.value}", String.class);
inputText.setValueExpression("value", veBinding);