Xpages 在对话框(扩展库对话框)中验证后设置字段焦点
我有以下对话框,当对话框有焦点时设置密码字段焦点,但这仅在首次加载时有效,我想在密码不匹配时设置密码字段焦点(即,在单击确定按钮并运行SSJS后)Xpages 在对话框(扩展库对话框)中验证后设置字段焦点,xpages,xpages-extlib,Xpages,Xpages Extlib,我有以下对话框,当对话框有焦点时设置密码字段焦点,但这仅在首次加载时有效,我想在密码不匹配时设置密码字段焦点(即,在单击确定按钮并运行SSJS后) 在设置facesContext.addMessage或其他方式后,是否可以设置密码字段焦点 更新:以下输出脚本正常工作: <xp:scriptBlock id="scriptBlockConfirmPassword"> <xp:this.value><![CDATA[#{javascr
在设置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可能可以解决您的难题
(从我的头上打下来-将包含错误)。
让我们知道它是如何运行的。感谢您提供的指针,特别是关于范围变量的指针,从现在起,我们将使用这些指针。我已经更新了我原来的问题,加入了对我有用的代码。很高兴为您服务
<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>