Xpages 在对话框(扩展库对话框)中验证后设置字段焦点

Xpages 在对话框(扩展库对话框)中验证后设置字段焦点,xpages,xpages-extlib,Xpages,Xpages Extlib,我有以下对话框,当对话框有焦点时设置密码字段焦点,但这仅在首次加载时有效,我想在密码不匹配时设置密码字段焦点(即,在单击确定按钮并运行SSJS后) 在设置facesContext.addMessage或其他方式后,是否可以设置密码字段焦点 更新:以下输出脚本正常工作: <xp:scriptBlock id="scriptBlockConfirmPassword"> <xp:this.value><![CDATA[#{javascr

我有以下对话框,当对话框有焦点时设置密码字段焦点,但这仅在首次加载时有效,我想在密码不匹配时设置密码字段焦点(即,在单击确定按钮并运行SSJS后)


在设置facesContext.addMessage或其他方式后,是否可以设置密码字段焦点

更新:以下输出脚本正常工作:

        <xp:scriptBlock id="scriptBlockConfirmPassword">
        <xp:this.value><![CDATA[#{javascript:   if(viewScope.PWDSuccess === null) {
    return "";
};

var result = "dojo.byId(\"";    
result += getComponent("confirmPassword").getClientId(facesContext);
result += "\").focus();";   

return result;}]]></xp:this.value>
    </xp:scriptBlock>

一些提示:

  • 不要追求像
    getComponent(“confirmPassword”)
    这样的组件,而是将组件绑定到一个范围变量,从而生成更好的代码
  • 您不能在SSJ中直接运行客户端JavaScript操作(如您所示)
  • 您的事件处理程序永远不会工作,因为XPages ID与客户端ID不同
  • outputscript可能可以解决您的难题
因此,请修改您的代码(此处仅适用于essentials):


(从我的头上打下来-将包含错误)。
让我们知道它是如何运行的。

感谢您提供的指针,特别是关于范围变量的指针,从现在起,我们将使用这些指针。我已经更新了我原来的问题,加入了对我有用的代码。很高兴为您服务
        <xp:scriptBlock id="scriptBlockConfirmPassword">
        <xp:this.value><![CDATA[#{javascript:   if(viewScope.PWDSuccess === null) {
    return "";
};

var result = "dojo.byId(\"";    
result += getComponent("confirmPassword").getClientId(facesContext);
result += "\").focus();";   

return result;}]]></xp:this.value>
    </xp:scriptBlock>
<xp:inputText id="confirmPassword" password="true" value="#{viewScope.confirmPWD}">
</xp:inputText>

<xp:button value="OK" id="btnConfirmPasswordOk">
    <xp:eventHandler event="onclick" submit="true" refreshMode="complete">
        <xp:this.action>
            <xp:actionGroup>
                <xp:executeScript>
                    <xp:this.script><![CDATA[#{javascript:try{
                      viewScope.PWDSuccess = session.verifyPassword(viewScope.confirmPWD, HTTPPassword);
                      if (viewScope.PWDSuccess){ 
                         /* RUNS NOTES AGENT */ 
                         getComponent('dialogConfirmPassword').hide();
                     } else {
                       facesContext.addMessage("messagesConfirmPassword", new javax.faces.application.FacesMessage("You have entered an incorrect password, please try again.") );
                     }

              } catch (e) {
        facesContext.addMessage("messagesConfirmPassword", new javax.faces.application.FacesMessage("ERROR! " + e.toString()) );
        viewScope.PWDSuccess = false;
            }
        return viewScope.PWDSuccess
     }]]></xp:this.script>
                    </xp:executeScript>
                </xp:actionGroup>
            </xp:this.action>
        </xp:eventHandler>
    </xp:button>

   <xp:outputScript>
         <this.value><!CDATA[#{javascript:if(viewScope.PWDSuccess) {return "";};
         var result = "dijit.byId(\"";
         result += getComponent("confirmPassword").getClientId();
         result += "\").focus();";
         return result;
         }]]</this.value>
   </xp:outputScript>