我正在使用jsf h:commandButton。我的要求是基于Button的值,我必须处理动作。我使用了以下
<h:commandButton id="raisecm" render="@all " styleClass="btn btn-primary" execute="@this"
value="#{scenarioConfigurationMB.status}"
actionListener="#{scenarioConfigurationMB.createPatchingCMTicket()}"
onclick="if(this.value=='Edit Ticket'){this.form.target='_blank';}">
</h:commandButton>
此状态可以是“创建故障单”或“编辑故障单”。如果状态为“创建故障单”,则必须在Backing Bean方法“createPatchingCMTicket”中创建故障单,否则如果状态为“编辑故障单”,则必须在新选项卡中返回打开页面以显示其详细信息。
支持bean的方法如下:
public String createPatchingCMTicket() {
System.out.println("***********************Ticket ID"+ ticketId);
ticketId="123";
System.out.println("Checking Status of CM Ticket For Patching ......");
if (status.equals("Edit Ticket")) {
System.out.println("*********Status is \"Edit Ticket\"");
try{
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
externalContext.redirect("/cm/view_ticket.xhtml?changeTicketId="+ticketId);
} catch(Exception e){
System.out.println("Redirection Failed........`enter code here`..................***************");
throw new FacesException("Redirection failed......");
}
System.out.println("********Redirected........");
return null;
}
System.out.println("Creating Ticket.............***********");
log.info("Creating CM Ticket For Patching ......");
//Code for Creating Ticket
}
如果我在h:commandButton中使用上述概念,如果状态是“编辑故障单”,它工作正常并重定向到新选项卡中的另一个URL,但仅用于第一次单击,如果我再次单击“编辑故障单” '它在新标签页中打开相同的基页,而不是重定向到新页面。
我为解决这个意想不到的问题付出了很多努力。 请帮助。