我使用的是PF 5.0和jsf 2.2.8,我的代码如下。
<ui:composition template="/template/mastertemplate.xhtml">
<ui:define name="content">
<f:view>
<h:body>
<h:form id="bcr_form_2" styleClass="form">
<p:tabView id="bcrId_tabview">
<p:tab title="Budget Cash Demands">
<h:panelGrid>
<p:commandButton value="save" id="saveDemandId_cmdbutton"
action="#{budgetControlRegisterAction.saveNewDemand()}"
binding="#{budgetControlRegisterAction.myMessageCId}"
update=":#{p:component('saveId_message')}">
</p:commandButton>
<p:message id="saveId_message" for="saveDemandId_cmdbutton" ></p:message>
</h:panelGrid>
</h:form >
<!-- and all closing tags-->
BudgetControlRegisterAction.java类(@ResquestScoped)
private UIComponent myMessageCId;
// setter and getter
public String saveNewDemand() {
FacesContext context = FacesContext.getCurrentInstance();
log.info("client Id :" + myMessageCId.getClientId(context));
//log output is -----> client Id :bcr_form_2:bcrId_tabview:saveDemandId_cmdbutton
//id on browser is ------> bcr_form_2:bcrId_tabview:saveDemandId_cmdbutton
/*this is not working */
//when i use myMessageCId.getClientId(context) nothing displayed on client side
FacesContext.getCurrentInstance().addMessage(myMessageCId.getClientId(context),new FacesMessage(FacesMessage.SEVERITY_INFO, "some msg" , "some msg"));
/*this is working and displaying msg to client browser*/
// but when i put hard coded component client Id (copied from web browser) e.g bcr_form_2:bcrId_tabview:saveDemandId_cmdbutton
// see it is without leading colon (:)
// and myMessageCId.getClientId(context) gives me id with colon(:) see log output in above lines
FacesContext.getCurrentInstance().addMessage("bcr_form_2:bcrId_tabview:saveDemandId_cmdbutton",new FacesMessage(FacesMessage.SEVERITY_INFO, "some msg" , "some msg"));
}
如何通过myMessageCId.getClientId(context)方法获取客户端ID(不带冒号)?
答案 0 :(得分:1)
我刚试过你的代码(我评论了你的第二个addMessage
,把@RequestScoped和删除composition
),它在Primefaces 5.1和Mojarra 2.2.8上运行得很好!
我注意到你的日志输出是:
client Id :bcr_form_2:bcrId_tabview:saveDemandId_cmdbutton
但要注意日志行代码:
log.info("client Id :" + myMessageCId.getClientId(context));
从字符串连接中引入了前导分号。所以真正的输出是:
bcr_form_2:bcrId_tabview:saveDemandId_cmdbutton
并且如上所述它起作用。