Выберите OneMenu и textEntry в IceFaces
У меня проблема с IceFaces, я пытаюсь изменить туз:textEntry зависит от элемента, выбранного на льду:selectOneMenu.
Также мне не нужно переходить на новую страницу, я хочу, чтобы она была AJAX и обновлялась каждый раз, когда я меняю ее. Я пытаюсь сделать это таким образом:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ice="http://www.icesoft.com/icefaces/component"
xmlns:ace="http://www.icefaces.org/icefaces/components"
xmlns:icecore="http://www.icefaces.org/icefaces/core">
<f:view>
<ice:selectOneMenu partialSubmit="true" onchange="submit()"
value="#{testBean.selectedItem}"
valueChangeListener="#{testBean.selectionChanged}"
immediate="true">
<f:selectItems value="#{testBean.standardList}"
var="itemValue" itemLabel="#{itemValue}"
itemValue="#{itemValue}" />
</ice:selectOneMenu>
<ace:textEntry labelPosition="left" label="Output text: " id="output" value="#{testBean.outputItem}" >
<ace:ajax render="@this"/>
</ace:textEntry>
</f:view>
И боб:
import java.util.Arrays;
import java.util.List;
import javax.faces.bean.CustomScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.event.ValueChangeEvent;
import javax.inject.Inject;
import org.slf4j.Logger;
@ManagedBean
@CustomScoped(value = "#{window}")
public class TestBean {
@Inject
private Logger logger;
private String selectedItem;
private String outputItem;
private List<String> standardList = Arrays.asList("Artur","Adam","Mirek");
public void selectionChanged(ValueChangeEvent e){
this.outputItem = this.selectedItem;
logger.info(this.outputItem);
}
public String getSelectedItem() {
return selectedItem;
}
public void setSelectedItem(String selectedItem) {
this.selectedItem = selectedItem;
}
public List<String> getStandardList() {
return standardList;
}
public void setStandardList(List<String> standardList) {
this.standardList = standardList;
}
public String getOutputItem() {
return outputItem;
}
public void setOutputItem(String outputItem) {
this.outputItem = outputItem;
}
Но это не сработает, какие-то решения? Большое спасибо.
1 ответ
Во-первых, ваш ace:ajax
не в нужном месте. Должно быть под ice:selectOneMenu
,
Во-вторых, я предлагаю вместо использования ice:selectOneMenu
, ты используешь h:selectOneMenu
, Со временем я узнал, что все работает лучше, когда ты ничего не используешь из ice
, Смесь h
а также ace
работает очень хорошо.
Я создал пример проекта, подобного вашему, и смог заставить его работать так:
<h:form>
<h:selectOneMenu value="#{Bean.valueOutput}">
<f:selectItems value="#{Bean.values}" />
<f:ajax event="change" render="output"/>
</h:selectOneMenu>
<ace:textEntry labelPosition="left" label="Output text: " id="output" value="#{Bean.valueOutput}" />
</h:form>
Ничего особенного в Bean.java, только обычные объявления и get/set.
Протестировано с ICEfaces 3.2 и JSF 2.1.6.