我做了自定义 Keycloak 主题。我正在从 msg_en.properties 文件中检索文本并使用 ftl 文件和 Keycloak 属性显示文本。使用 ${msg(key)} 在 ftl 文件中添加的文本工作正常,只是无法检索从 java 脚本中动态添加的文本。
这是登录更新密码.ftl 文件
<div id="password-error-message" class="keyclaok-err-msg"></div> here adding custom text
<#if message?has_content>
<div class="update-password-alert-div" id="keycloak-error-message">
<#if message.type == "error" || message.type == "warning" >
<span class="kc-feedback-text keyclaok-err-msg">${kcSanitize(message.summary)?no_esc}</span>**//this works**
</#if>
</div>
</#if>
这里 login.js 文件添加自定义功能
$('#password-new').focusout(function(e) {
var newPassword = this.value;
var passwordValidation = [
{ message: '${msg("passwordcharErrMsg")}', validation: /^.{8,}$/},
{ message: '${msg("passwordNumErrMsg")}', validation: /[0-9]/ },
{ message: '${msg("passwordSpCharErrMsg")}', validation: /[ !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]/},
{ message: '${msg("passwordCapLetErrMsg")}', validation: /[A-Z]/}
];
var passwordErrorMessage = [];
for(let index = 0;index < passwordValidation.length;index++){
if(!passwordValidation[index].validation.test(newPassword)){
passwordErrorMessage.push(passwordValidation[index].message);
}else{
passwordErrorMessage.splice(index,1);
}
}
if(this.value.length < 256){
validPassword = true;
removeError(e, this);
showError("#password-error-message","");
if(passwordErrorMessage.length) {
var last = passwordErrorMessage.pop();
var message = '${msg("passwordMainErrText")} ';
if(passwordErrorMessage.length){
message += passwordErrorMessage.join(", ");
message += " and "+last + ".";
}else{
message += last + ".";
}
validPassword = false;
applyError(e, this);
showError("#password-error-message",message);
}else{
validPassword = true;
removeError(e, this);
showError("#password-error-message","");
}
}else{
validPassword = false;
applyError(e, this);
showError("#password-error-message",'${msg("passwordMaxLenErrText")}');
}
$('#password-confirm').trigger('focusout');
checkValidity();
});
function showError(id,errorMessage){
var message = String(errorMessage);
$(id).html(message);
}