我正在尝试使用java函数发出的消息来发出警报。系统就像这样简单:
public class AdminBean extends AbstractListBean {
private Collection <Hours> A;
private ModelDto selectedModel;
private String message;
public void insert() {
//some preparations
setMessage("");
if ( selectedModel!= null ) {
try{
//try insert of selected model
setMessage("Success");
}catch (Exception e) {
setMessage("Unespected Error");
}
}else{
setMessage("Not available");
}
//getHttpServletRequest().setAttribute("message", getMessage());
//FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(message));
}
}
而且,在客户端,我写了这样的xhtml:
<a4j:commandLink styleClass="inscribirse" rendered="#{model.status eq 'N' and model.styleClass eq 'font-weight:bold;'}">
<a4j:jsFunction name="okClicked" actionListener="#{AdminBean.insert}" oncomplete="reDirigir(message)">
<a4j:actionparam name="message" assignTo="#{AdminBean.message}"/>
</a4j:jsFunction>
<h:outputText value="Inscribirse" />
<f:setPropertyActionListener target="#{AdminBean.selectedModel}" value="#{model}" />
</a4j:commandLink>
因此,当单击A4J命令时,“插入”功能运行,我可以看到它正在观看数据库,但是“reDirigir”功能不起作用:
function reDirigir(c){
alert(c);
window.location.href='#{facesContext.externalContext.request.contextPath}/StrutsJsfServlet?beanName=menuBean&method=eventos';
}
我的目的是显示来自bean的消息,然后刷新页面。有什么建议?
非常感谢!
PS:这个xhtml代码在集合A的迭代中,而#{model}是迭代器中使用的别名:
答案 0 :(得分:1)
<a4j:jsFunction name="okClicked" actionListener="#{AdminBean.insert}" oncomplete="reDirigir(message)">
这不起作用。您将向您的支持bean发送“消息”,但它不会被发回,并且可能会在您的javascript函数中使用。
假设您想要alert(...)
消息(在我看来有点难看),最简单的方法是拥有隐藏的输入字段,其值为消息。您的commandLink将重新记录此隐藏字段,以便您可以在通过javascript调用bean之后访问其值。
使用jQuery可能就像$('input#hidden_input_id').val()
您的函数reDirigir
可能看起来像这样
function reDirigir() {
alert($('input#hidden_input_id').val());
window.location.href='#{facesContext.externalContext.request.contextPath}/StrutsJsfServlet?beanName=menuBean&method=eventos';
}
我无法分辨这种重定向是否正确,但问题是“消息”参数实际上以前不存在。没有它,它现在应该正常工作。
答案 1 :(得分:0)
问题是由JSF提供的自动ID,我使用:
解决了这个问题<h:form prependId="false">