JSF: перезагрузка страницы с помощью кнопки p: с использованием «? IncludeViewParams = true» приводит к% 2 C для целочисленного параметра GET в новом URL - PullRequest
0 голосов
/ 13 марта 2020

У меня есть страница с двумя параметрами GET:

round = [некоторое целое число]

group = [некоторая строка]

enter image description here

См. URL выше.

Это два компонента PK группы, INT + VARCHAR.

Код Facelet:

    <f:metadata>
        <f:viewParam name="round" value="#{groupHandler.roundId}">
            <f:convertNumber integerOnly="true" />
        </f:viewParam>
        <f:viewParam name="group" value="#{groupHandler.groupCode}" />
        <f:viewAction action="#{groupHandler.loadEntity}" />
    </f:metadata>

    ...

    <p:button widgetVar="reloadPageButton"
              value="Reload page"
              outcome="#{view.viewId}?includeViewParams=true" />

    <h1>Group Manager</h1>

    ...

Как видите, компонент groupHandler получает идентификатор раунда через <h:viewParam name="round" value="#{groupHandler.roundId}"> с помощью преобразователя чисел.

Я создаю кнопку для перезагрузки страницы, включая параметры просмотра. При нажатии этой кнопки страница корректно перезагружается, однако теперь она содержит запятую %2C в новом URL:

enter image description here


EDIT # 1:

Вот что должен сказать p:link:

enter image description here


EDIT # 2 :

Минимальный воспроизводимый пример:

X HTML:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui"
      xmlns:h="http://java.sun.com/jsf/html">

    <f:view encoding="UTF-8">

        <f:metadata>
            <f:viewParam name="round" value="#{groupHandler.roundId}">
                <f:convertNumber integerOnly="true" />
            </f:viewParam>
            <f:viewParam name="group" value="#{groupHandler.groupCode}" />
            <f:viewAction action="#{groupHandler.loadEntity}" />
        </f:metadata>

        <h:head>
            <title>PrimeFaces View Param Int Reload Test</title>
        </h:head>

        <h:body>

            <p:link widgetVar="reloadPageButton"
                    value="Reload page"
                    outcome="#{view.viewId}?includeViewParams=true" />
            <p />

            <h:form id="test-form">

                The selected group is: [#{groupHandler.roundId}, #{groupHandler.groupCode}]

            </h:form>

        </h:body>

    </f:view>

</html>

Боб:

@Named
@ViewScoped
public class GroupHandler implements Serializable
{
    private static final long serialVersionUID = 1L;

    private Integer roundId;
    private String groupCode;

    public Integer getRoundId()
    {
        return roundId;
    }

    public void setRoundId( Integer roundId )
    {
        this.roundId = roundId;
    }

    public String getGroupCode()
    {
        return groupCode;
    }

    public void setGroupCode( String groupCode )
    {
        this.groupCode = groupCode;
    }

    public void loadEntity()
    {
        System.out.println( GroupHandler.class.getSimpleName() + ".loadEntity(): round ID = " + getRoundId() + ", group code = " + getGroupCode() );
    }
}

ВОПРОС:

Почему это происходит?

Как мне от этого избавиться?

Я использую Mojarra 2.3.x, PrimeFaces 8, WildFly 14

...