Значение SelectManyCheckbox не обновляется на xhtml (frontend), хотя обновления в bean [duplicate]

Откуда взялось «Нет»?

Функция.

И что это такое?

Это то, что возвращала функция.

В Python каждая функция возвращает что-то. Он может «быть несколькими вещами», используя кортеж, или он может «быть ничем», используя None, но он должен что-то вернуть. Вот как мы имеем дело с тем, что не существует способа указать тип возврата (что не имеет смысла, поскольку вы не указываете типы для чего-либо еще). Когда интерпретируется как строка для печати, None заменяется строкой «Нет».

None - это особый объект, который должен представлять отсутствие какой-либо реальной вещи. Его тип NoneType (это экземпляр этого класса). Всякий раз, когда вы явно ничего не возвращаете, вы неявно возвращаете None.

Вы написали функцию для печати одного из двух значений x или y, но ничего не возвращали. Итак, None был возвращен. Затем вы попросили Python распечатать результат вызова функции. Поэтому он назвал функцию (печать одного из значений), а затем напечатал возвращаемое значение, которое было None, как текст «Нет».

6
задан BalusC 27 March 2016 в 16:14
поделиться

4 ответа

Вы столкнулись с этой проблемой, потому что у вас есть дважды id="first". Исправьте это, и он должен работать.

-3
ответ дан Anthony Perot 27 August 2018 в 06:08
поделиться
1
ответ дан Archana 27 August 2018 в 06:08
поделиться

Поместите компонент в область видимости и избавьтесь от любой бизнес-логики в методах getter.

Компонент должен быть помещен в область представления, чтобы все предыдущие выборы и новые доступные элементы были запомнены, в противном случае что-то не удастся, если, например, rendered атрибут зависит от условия, которое было задано только в предыдущем запросе, или если JSF должен проверить выбранный элемент по списку доступных элементов.

Методы getter не должны содержать никакой бизнес-логики, поскольку они также будет использоваться во время ao фаза проверки. Вы должны использовать <f:ajax listener> для выполнения бизнес-логики на основе изменения. Вы должны в методе слушателя также явно очистить выбранные значения дочерних выпадающих списков. Вы можете использовать <f:ajax render> для обновления содержимого дочерних выпадающих списков.

Таким образом, так:

<h:selectOneMenu id="state" value="#{nodes.selectedState}">
    <f:selectItem itemValue="#{null}" itemLabel="-- select --" />
    <f:selectItems value="#{nodes.availableStates}" />
    <f:ajax listener="#{nodes.changeState}" render="city region station" />
</h:selectOneMenu>
<h:selectOneMenu id="city" value="#{nodes.selectedCity}">
    <f:selectItem itemValue="#{null}" itemLabel="-- select --" />
    <f:selectItems value="#{nodes.availableCities}" />
    <f:ajax listener="#{nodes.changeCity}" render="region station" />
</h:selectOneMenu>
<h:selectOneMenu id="region" value="#{nodes.selectedRegion}">
    <f:selectItem itemValue="#{null}" itemLabel="-- select --" />
    <f:selectItems value="#{nodes.availableRegions}" />
    <f:ajax listener="#{nodes.changeRegion}" render="station" />
</h:selectOneMenu>
<h:selectOneMenu id="station" value="#{nodes.selectedStation}">
    <f:selectItem itemValue="#{null}" itemLabel="-- select --" />
    <f:selectItems value="#{nodes.availableStations}" />
</h:selectOneMenu>

с

@ManagedBean
@ViewScoped
public class Nodes {

    private String selectedState; // getter+setter
    private String selectedCity; // getter+setter
    private String selectedRegion; // getter+setter
    private String selectedStation; // getter+setter
    private List<SelectItem> availableStates; // getter (no setter necessary!)
    private List<SelectItem> availableCities; // getter (no setter necessary!)
    private List<SelectItem> availableRegions; // getter (no setter necessary!)
    private List<SelectItem> availableStations; // getter (no setter necessary!)

    @EJB
    private SomeService someService;

    @PostConstruct
    public void init() {
        availableStates = someService.listStates();
    }

    public void changeState(AjaxBehaviorEvent event) {
        availableCities = someService.listCities(selectedState);
        selectedCity = selectedRegion = selectedStation = null;
        availableRegions = availableStations = null;
    }

    public void changeCity(AjaxBehaviorEvent event) {
        availableRegions = someService.listRegions(selectedCity);
        selectedRegion = selectedStation = null;
        availableStations = null;
    }

    public void changeRegion(AjaxBehaviorEvent event) {
        availableStations = someService.listStations(selectedRegion);
        selectedStation = null;
    }

    // Generate necessary getters+setters here. You should not change them.
}

См. также:

7
ответ дан Community 27 August 2018 в 06:08
поделиться

Попробуйте это, это может помочь вам

С помощью --Select City--, --Выберите Region--, --Select Station--, чтобы избежать исключения нулевого указателя.

    public getStateList(){
    stateList= new ArrayList<SelectItem>();
    stateList.add(new SelectItem("A"));
    }

    public getCityList(){
    CityList= new ArrayList<SelectItem>();
    if(selectState.equals("A"))
    {
      CityList.add(new SelectItem("B"));
    }
    else
    {
      CityList.add(new SelectItem("--Select City--"));
      selectCity = "--Select City--";
    }

    public getRegionList(){
    RegionList= new ArrayList<SelectItem>();
    if(selectCity.equals("B"))
    {
      RegionList.add(new SelectItem("C"));
    }
    else
    {
      RegionList.add(new SelectItem("--Select Region--"));
      selectRegion = "--Select Region--";
    }
    }

    public getStationList(){
    StationList= new ArrayList<SelectItem>();
    if(selectRegion.equals("C"))
    {
       StationList.add(new SelectItem("D"));
    }
    else
    {
      StationList.add(new SelectItem("Select Station"));
      selectStation = "--Select Station--";
    }
    }
-1
ответ дан newuser 27 August 2018 в 06:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: