我正在尋找一種可能性編寫ajax調用每個元素。jsf以編程方式ajax函數調用
我有辦法,建立UI組件
第一 - 結合 - panelGroup中)
HtmlSelectOneMenu HSOM = new HtmlSelectOneMenu();
UISelectItems items = new UISelectItems();
List<SelectItem> comboList = new ArrayList<SelectItem>();
comboList.add(new SelectItem(" "));
comboList.add(new SelectItem("1"));
comboList.add(new SelectItem("2"));
comboList.add(new SelectItem("3"));
items.setValue(comboList);
HSOM.getChildren().add(items);
HSOM.setValueExpression("value", buildValueExpression("#{productDetails.productOptionValue}"));
AjaxBehavior ajax = new AjaxBehavior();
ajax.setValueExpression("value", buildValueExpression("#{productDetails.updateProduct()}"));
HSOM.addClientBehavior("valueChange", ajax);
HSOM.addValidator(new BeanValidator());
productOptions.getChildren().add(HSOM);
private ValueExpression buildValueExpression(String exp) {
FacesContext facesInstance = FacesContext.getCurrentInstance();
Application application = facesInstance.getApplication();
ExpressionFactory expressionFactory = application.getExpressionFactory();
String expression = exp;
return expressionFactory.createValueExpression(facesInstance.getELContext(), expression, String.class);
}
我所看到的,一個AJAX調用鏈接到組件,但的UpdateProduct()函數沒有被調用。
的另一種可能創建動態組件是)
public void encodeEnd(FacesContext context) throws IOException {
System.out.println("Start encoding");
ResponseWriter responseWriter = context.getResponseWriter();
responseWriter.startElement("span", null);
responseWriter.writeAttribute("id",getClientId(context),"id");
responseWriter.writeAttribute("name", getClientId(context),"clientId");
responseWriter.write("Farbe");
responseWriter.endElement("span");
responseWriter.startElement("select", null);
responseWriter.writeAttribute("id",getClientId(context),"id");
responseWriter.writeAttribute("name", getClientId(context),"clientId");
responseWriter.writeAttribute("value", "#{artikelDetails.productOptionValue}", "value");
responseWriter.startElement("option", null);
responseWriter.write("Gelb");
responseWriter.endElement("option");
responseWriter.startElement("option", null);
responseWriter.write("Blau");
responseWriter.endElement("option");
responseWriter.endElement("select");
System.out.println("End encoding");
}
如何添加AJAX調用上的每個選擇ELE這裏? 你更喜歡哪種方法?
這是一個非常簡單的例子,在這裏我不通過環 建立很多選擇ELE首先我需要得到這個工作...
感謝balus,我會試試看。 – Sence
但是,如果有很多組件需要構建,基於數據庫信息(例如產品變體和條件),我喜歡以編程方式構建em。 當然,我可以使用ui:repeat,jstl和其他ui「management」組件,但我不同意使用ui組件總是更乾淨更好。 如果你有一棵樹有很多葉子,你可以定義一個連接函數,並且如果一個葉子有更多的子元素,就自動執行這個函數。 jstl或ui如何做:重複? vg – Sence
JSTL不會在組件樹中結束。它在構建組件樹期間運行。請注意'ui:repeat'不是JSTL,'c:forEach'(和'c:if'等)是。點擊給定的鏈接以獲取更多信息。 – BalusC