У меня есть p:commandLink
и я хотел бы сделать так, чтобы контроллер определял свое действие на основе параметра.
Вот что у меня есть:
<p:commandLink
action="#{controller.getAction(rownum)}"
title="Go"
styleClass="ui-icon ui-icon-refresh centered"
ajax="false"
disabled="#{controller.isLinkDisabled(rownum)}">
<f:param name="controllerId" value="#{otherController.getId()}" />
</p:commandLink>
rownum
— это rowIndexVar
из p:dataTable
, в которых находится кнопка.
Метод контроллера:
public String getAction(Integer id) {
if(id == 0) {
LOG.info("Id is 0"); //LOG is a log4j logger
return "toDestinationOne";
} else {
LOG.info("Id is not 0");
return "toDestinationTwo";
}
}
Это не работает.
Если я нажму кнопку в первой строке dataTable, то в логе увижу
Id is 0
Так что это означает, что метод вызывается правильно, но по какой-то причине он игнорирует возвращаемое значение, страница просто обновляется, меня не перенаправляют на новую страницу.
Обе строки находятся в faces-config.xml
:
<navigation-case>
<description>To destination one</description>
<from-action>toDestinationOne</from-action>
<from-outcome>toDestinationOne</from-outcome>
<to-view-id>/pages/destinationOne.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<description>To destination two</description>
<from-action>toDestinationTwo</from-action>
<from-outcome>toDestinationTwo</from-outcome>
<to-view-id>/pages/destinationTwo.xhtml</to-view-id>
</navigation-case>
Если я прямо поставлю значение вместо этого, оно будет работать правильно.
Я имею в виду, это:
<p:commandLink
action="toDestinationOne"
title="Go"
styleClass="ui-icon ui-icon-refresh centered"
ajax="false"
disabled="#{controller.isLinkDisabled(rownum)}">
<f:param name="controllerId" value="#{otherController.getId()}" />
</p:commandLink>
Работает правильно, меня успешно перенаправляют на нужную страницу.
Итак, есть ли способ заставить commandLink
следовать за action
, возвращаемым методом getAction
?