我对jsf真的很陌生。 我需要根据记录的用户权限启用,禁用,渲染或不渲染页面上的某些按钮。该页面绑定到请求范围的托管bean,我将commandbutton的呈现或禁用属性绑定到托管bean的“visible”属性,并将actionlistener绑定到managedbean方法,该方法的唯一目的是导航到另一个页面。 如果我将上述属性之一绑定到visibile属性,则不会调用导航方法,并且在禁用或未呈现按钮的情况下重新呈现相同的页面。 更迫切需要的是“如何禁用或隐藏按钮?”的答案。当然, 但是,因为我猜这个问题是由于jsf页面生命周期和bean范围所致,所以我还想直接找到一些比可以找到的hello世界更先进的教程。
下面的是代码的一部分。 提前感谢您的任何帮助
xhtml页面
<ui:define name="content">
<p:layoutUnit position="center" header="Dettaglio Pratica" scrollable="true">
<h:form id="formDettaglioPratica">
<!-- i've used javascript to redirect -->
<p:commandButton styleClass="commandButton" value="Modifica pratica" ajax="false"
rendered="#{praticaCtrl.visible}" onclick="navigateToChange();return false;"/>
<p:commandButton id="backButton" styleClass="commandButton" value="Torna alla lista"
onclick="navigateToHome();return false;"></p:commandButton>
<!-- never redirect to page defined in method checkIn -->
<p:commandButton id="checkinButton" styleClass="commandButton" value="Rilascia pratica" ajax="false"
actionListener="#{praticaCtrl.checkIn}" disabled="#{praticaCtrl.visible}"></p:commandButton>
<!-- printing output values -->
<h:inputHidden id="idPratica" value="#{praticaCtrl.idPratica}"></h:inputHidden>
<h:inputHidden id="idBox" value="#{praticaCtrl.box}"></h:inputHidden>
</h:form>
</p:layoutUnit>
</ui:define>
托管bean的相关部分
public boolean isVisible() {
return isVisible;
}
public void setVisible(boolean isVisible) {
this.isVisible = isVisible;
}
public void setUser(IUserProvider user) {
try{
if(pratica.getUtenteCheckOut() == null
|| (pratica.getUtenteCheckOut().getMatricola().equalsIgnoreCase(user.getUser().getMatricola()))
)
setVisible(true);
else
setVisible(false);
this.user = user;
}
catch(Exception ex)
{log.error(ex);}
}
public void checkIn(ActionEvent event)
{
try{
log.info(String.format("modifica della pratica %s", idPratica));
ajaxRedirect(String.format("../Box/ListaRichieste.xhtml?box=%s",box));
}
catch(Exception ex)
{
log.error(ex.getMessage(),ex);
}
}
这是ajaxRedirect方法,我们不使用导航规则,也没有方法返回字符串
protected void ajaxRedirect(String url) throws IOException {
FacesContext.getCurrentInstance().getExternalContext()
.redirect(url);
}
答案 0 :(得分:0)
所描述行为的答案可以在http://forum.primefaces.org/viewtopic.php?f=3&t=13269&p=39996找到,它引用了关于stackoverflow的类似问题的BalusC答案:commandButton/commandLink/ajax action/listener method not invoked or input value not updated