如何首先执行commandLink'actionListener函数然后只执行JavaScript提示符?

时间:2012-10-25 11:23:40

标签: javascript jsf-2 facelets managed-bean

基本上我有一份记录清单。每条记录(VO bean)都会附加一个警告标志alertFlag。当alertFlag为true时,将提示一个警告框。否则就不会提示。

VO bean:

@ManagedBean(name = "theVo")
@SessionScoped
public class TheVO {
   private boolean alertFlag;

   /** getter and setter **/
}

以下是XHTML代码:

<t:dataTable var="theRecord" value="#{theVo.theList}">

  <t:column>
    <h:commandLink value="#{theRecord.recNo}" 
      actionListener="#{theEnquiry.doSetAlertFlag(theRecord.paramKey)}" 
      immediate="true" 
      action="#{theDetail.doShowDetailsPage(theRecord)}" 
      onclick="readAlertFlag(#{theEnquiry.alertFlag})"/>
    </h:commandLink>
  </t:column>

  ...
  ...
</t:dataTable>

这是theEnquiry bean:

@ManagedBean(name = "theEnquiry")
@SessionScoped
public class Enquiry {

   private boolean alertFlag = false;

   /** getter and setter of alertFlag **/

   public void doSetAlertFlag(Integer theParamKey) {

      // check whether the alert flag is true or false.
      // if alert flag is true, otherwise set it false
   }
}

以下是JavaScript代码:

function readAlertFlag(alertFlag) {

  if( alertFlag == "true" )
    alert('alertFlag is true');
  else
    alert('alertFlag is false');
}

我目前的情况是JavaScript警告框将始终先执行,然后只执行doSetAlertFlag()。但我的期望是首先执行doSetAlertFlag()因为我希望在提示之前先完成检查。如果在JavaScript提示符下无法完成此操作,我可以选择其他解决方案。

1 个答案:

答案 0 :(得分:0)

让JSF有条件地渲染脚本。将onclick替换为<h:outputScript rendered>

<h:commandLink ... />
<h:outputScript rendered="#{theEnquiry.alertFlag}">showAlert()</h:outputScript>