primefaces commandButton не устанавливает значение поля ввода в пользовательском интерфейсе: repeat - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть список в области видимости бобов. # {RepeatController.add} новый объект в списке. Он также вызывает h: commandButton и p: commandButton.

Моя проблема в том, что когда у меня появляется новая строка, вводящая что-то в поле «repeatName», после нажатия h: commandButton или p: commandButton они работают по-разному.

h: commandButton помещает новое значение поля в bean-компонент, и оно появляется после обновления формы и новой строки.

p: commandButton не выдвигает новое значение поля в bean-компонент. После обновления формы появилась новая строка, но ранее набранное содержимое поля «repeatName» пусто.

Я думаю, что h: commandButton работает нормально, p: commandButton не работает нормально.

Значение поля «noRepeatName» всегда устанавливается с помощью h: commandButton и p: commandButton.

Шаги и результат с помощью h: commandButton:

  1. нажмите кнопку (создать новую строку) несколько раз.
  2. введите в поле "noRepeatName"
  3. введите первое поле «repeatName»
  4. нажать на кнопку

Результат: после обновления появилось ранее набранное содержимое поля.

Шаги и результат с помощью p: commandButton:

  1. нажмите кнопку (создать новую строку) несколько раз.
  2. введите в поле "noRepeatName"
  3. введите первое поле «repeatName»
  4. нажать на кнопку

Результат: после обновления появилось ранее набранное содержимое поля «noRepeatName», но первое «repeatName» пусто.

Я что-то пропустил? Почему не установить значение первого «repeatName», поданного в bean-компонент, как с помощью h: commandButton?

Я использую Primefaces 6.2.10, JSF 2.2.18 (oracle) и Spring Boot 2.0.6.

JSF код

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
      xmlns:f="http://xmlns.jcp.org/jsf/core"
      xmlns:p="http://primefaces.org/ui">
<h:head/>
<h:body>
    <h:form id="repeatForm">
        <h:commandButton value="plus" id="addJsf">
            <f:ajax event="click" immediate="true" render="repeatForm" execute="repeatForm"
                    listener="#{repeatController.add}"/>
        </h:commandButton>
        <p:commandButton icon="fa fa-plus" actionListener="#{repeatController.add}" immediate="true" id="add"
                         process="repeatForm" update="repeatForm"/><br/>
        <p:inputText value="#{repeatData.name}" id="noRepeatName">
            <f:validateLength minimum="30"/>
        </p:inputText><br/>
        <ui:repeat value="#{repeatData.products}" var="product" varStatus="productStatus">
            First: #{productStatus.first}"; Last: #{productStatus.last}; Index: #{productStatus.index}<br/>
            <p:inputText value="#{product.name}" id="repeatName">
               <f:validateLength minimum="20"/>
            </p:inputText><br/>
        </ui:repeat>
    </h:form>
</h:body>
</html>

боб Java

@Named
@Scope("view)
public class RepeatData {
    private List<Product> products = new ArrayList<>();

    private String name;

    public List<Product> getProducts() {
        return products;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Продукт

public class Product {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Контроллер

@Named
@Scope("request")
public class RepeatController {
    @Autowired
    private RepeatData repeatData;

    public void add() {
        repeatData.getProducts().add(new Product());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...