Почему Primefaces commandButton не перенаправляет на страницу?

Я использую Primefaces версии 6.2 в сочетании с jsf и trinidaad. В проекте у меня есть таблица, каждая строка которой содержит кнопку для перенаправления этой страницы на другую страницу на основе выбранной строки. jsf и trindad commandLink и commandButton выполняют свою работу, а начальные символы commandLink и command button - нет.

Что я уже сделал:

  1. Изменен тип кнопки на type = "button"
  2. Добавлен immediate = "true"
  3. Я использовал actionListener = "#{coolingBean.view(row)}" вместо action = "#{coolingBean.view}".

Кто-нибудь знает, почему и что я должен изменить?

<p:column id = "viewButtonColumn" exportable = "false" style = "text-align: center" >
            <tr:commandLink textAndAccessKey = "&amp;view " id = "viewButton" action = "#{coolingBean.view}" styleClass = "commandLinkMediumSmallFont" onclick = "PF('bui').show()">
                <tr:image source = "/imgs/view.png" styleClass = "commandLinkImageWithText"/>
                <f:setPropertyActionListener value = "#{row.number}" target = "#{coolingBean.criteria.number}"/>
                <f:setPropertyActionListener value = "#{row.id}" target = "#{searchBean.selectedId}"/>
            </tr:commandLink>
</p:column>

<p:column id = "viewButtonColumn1" exportable = "false" style = "text-align: center" >
            <h:commandLink  textAndAccessKey = "&amp;view " id = "viewButton1" action = "#{coolingBean.view}" styleClass = "ui-priority-primary" onclick = "PF('bui').show()">
                <i class = "fa fa-search" ></i>
                <f:setPropertyActionListener value = "#{row.number}" target = "#{coolingBean.criteria.number}"/>
                <f:setPropertyActionListener value = "#{row.id}" target = "#{searchBean.selectedId}"/>
            </h:commandLink>
</p:column>

<p:column id = "viewButtonColumn2" exportable = "false" style = "text-align: center" >
            <p:commandLink value = "View" id = "commandLinkView" action = "#{coolingBean.view}" styleClass = "ui-priority-primary" onclick = "PF('bui').show()">
                <i class = "fa fa-search" ></i>
                <f:setPropertyActionListener value = "#{row.number}" target = "#{coolingBean.criteria.number}"/>
                <f:setPropertyActionListener value = "#{row.id}" target = "#{searchBean.selectedId}"/>
            </p:commandLink>
</p:column>

<p:column id = "viewButtonColumn3" exportable = "false" style = "text-align: center" >
            <p:commandButton id = "viewButton2" value = "View" action = "#{coolingBean.view}" icon = "fa fa-search" immediate = "true" type = "button" onclick = "PF('bui').show()">
               <f:setPropertyActionListener value = "#{row.number}" target = "#{coolingBean.criteria.number}"/>
               <f:setPropertyActionListener value = "#{row.id}" target = "#{searchBean.selectedId}"/>
            </p:commandButton>
</p:column>

Внутри управляемого компонента

public String view(Row selectedRow) {
    if (criteria == null)
      criteria = new criteriaBean();

    criteria.setNummer(selectedRow.getNummber());
    searchBean.selectedId = selectedRow.getId();


 //FacesContext.getCurrentInstance().getExternalContext().dispatch("view.jsp");
    return view();
  }

  public String view(){

    return"view';
  }

Так это работает, если вы не используете тринидад на странице или в проекте? Или если сделать что-то подобное без p:datatable и называется {coolingBean.view? Просто редирект не работает? Амд почему type='button'?

Kukeltje 21.01.2019 11:45

Нет, это вообще не работает. если я просто использую Тринидад, это работает, если я использую Primeface, это не работает. Я хочу удалить Тринидад со своей страницы и просто использовать простые лица, но кнопка простых лиц и командная ссылка не работают. Я просто использовал type='button', чтобы увидеть, есть ли разница.

itro 21.01.2019 14:07

`type = "button" неверен, см. документы PF или stackoverflow. Лучше создать настоящий минимальный воспроизводимый пример без тринидада, который не сработает. И удалите тег тринидада, поскольку теги предназначены для того, где проблема, а не для того, что вы используете (и, конечно, не для того, что работает)

Kukeltje 21.01.2019 17:11

Я полностью удалил Тринидад со своей страницы, но Primeface все еще не работает. Позвольте мне внести ясность. Первоначально этот проект был построен на Тринидаде. Я решил перейти на Primeface из-за смерти Тринидада. это причина, почему я должен придерживаться Тринидада в проекте и немного избавиться от него.

itro 22.01.2019 08:19

Эта часть уже была ясна. Я просто помогаю вам сузить проблему. h:commandButton работает? И было больше вопросов в моем комментарии. Пожалуйста, И измените код соответствующим образом на минимальный воспроизводимый пример

Kukeltje 22.01.2019 09:05
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
5
995
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот этот действительно помог мне.

В основном добавление одного из следующих действий помогло мне:

  • Добавление ajax = "false" в commandButton
  • Добавление ?faces-redirect=true к URL-адресу (например, return "view?faces-redirect=true';)

На самом деле это не решать исходный вопрос, а скорее обходит проблему. В этом конкретном случае ваше решение работает, но что происходит, когда вам действительно нужен ajax? Как предложил @Kukeltje, ваш первоначальный вопрос необходимо дополнить дополнительным кодом, потому что ряд вещей может привести к тому, что commandButton не сработает.

Adam Waldenberg 30.01.2019 07:48

Другие вопросы по теме