I have a faces-config.xml that contains a lot of navigation rules but I'm not able to get a redirect-param in my page.
I've searched a lot about this issue but I couldn't find any helping response.
detail.xhtml:
<p:commandLink action="#{bean.delete()}">
<f:setPropertyActionListener target="#{bean.deletionSuccess}" value="true" />
<p:confirm header="Confirmation" message="Are you sure?"
</p:commandLink>
faces-config.xml:
<navigation-rule>
<from-view-id>/myDetailPage.xhtml</from-view-id>
<navigation-case>
<from-outcome>deletionSuccess</from-outcome>
<to-view-id>/myOverviewPage.xhtml</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
Java-Bean:
private String deletionSuccess;
public String delete() {
// do something
return "deletionSuccess";
}
public void setDeletionSuccess(String deletionSuccess) { this.deletionSuccess = deletionSuccess; }
public String getDeletionSuccess() { return deletionSuccess; }
overview.xhtml:
<f:metadata>
<f:viewParam name="deletionSuccess" value="#{bean.deletionSuccess}"/>
<f:viewAction action="#{bean.init}"/>
</f:metadata>
...
<h:form id="mainform" class="form-horizontal overview" role="form" method="post">
<h:panelGroup styleClass="row" rendered="#{!empty housePlantBean.deletionSuccess}">
...
What am I doing wrong? Or how can I get the redirect-param in my XHTML-page?
Thanks a lot for your help!
This won't work in such way.
First of all you need to have defined <f:viewParam>
on myOverviewPage.xhtml
facelet, eg:
<f:metadata>
<f:viewParam name="deletionSuccess" value="#{bean.deletionSuccess}"/>
</f:metadata>
I suppose you had it defined.
The easies way to pass params is use <h:button>
or <h:link>
on myDetailPage.xhtml
facelet, eg:
<h:button outcome="deletionSuccess">
<f:param name="deletionSuccess" value="#{true}"/>
</h:button>
but there is no invocation of public String delete()
method.
So if you want to have redirection and invocation of this method you should use <h:commandButton>
or <h:commandLink>
, eg:
<h:commandButton value="submit" action="#{bean.delete}">
<f:setPropertyActionListener target="#{bean.deletionSuccess}" value="#{true}" />
</h:commandButton>
--- UPDATE
Please keep correct file names in navigation-rule
<navigation-rule>
<from-view-id>/detail.xhtml</from-view-id>
<navigation-case>
<from-outcome>deletionSuccess</from-outcome>
<to-view-id>/overview.xhtml</to-view-id>
<redirect include-view-params="true"/>
</navigation-case>
</navigation-rule>
and please add to detail.xhtml
:
<p:confirmDialog global="true" showEffect="fade" >
<p:commandButton value="Yes" type="button" styleClass="ui-confirmdialog-yes" icon="ui-icon-check"/>
<p:commandButton value="No" type="button" styleClass="ui-confirmdialog-no" icon="ui-icon-close"/>
</p:confirmDialog>
or remove
<p:confirm header="Confirmation" message="Are you sure?"/>
from <p:commandLink>
tag