У меня есть страница с двумя параметрами GET:
round = [некоторое целое число]
group = [некоторая строка]
См. 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:
EDIT # 1:
Вот что должен сказать p:link
:
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