更改liferay ui:使用javascript输入本地化的XML

更改liferay ui:使用javascript输入本地化的XML,javascript,liferay,liferay-7,Javascript,Liferay,Liferay 7,我在my view.jsp中有以下标记: <liferay-ui:input-localized id="message" name="message" xml="" /> 更改该值只会更新当前选定的语言输入(使用整个XML字符串)。XML字符串是正确的,但我不确定如何用javascript更新输入的XML 这可能吗 PS:我已经在中发布了这篇文章,以尝试联系更多的人。要更改元素的文本值,必须更改元素的文本节点的值 范例-

我在my view.jsp中有以下标记:

<liferay-ui:input-localized id="message" name="message" xml="" />
更改该值只会更新当前选定的语言输入(使用整个XML字符串)。XML字符串是正确的,但我不确定如何用javascript更新输入的XML

这可能吗


PS:我已经在中发布了这篇文章,以尝试联系更多的人。

要更改元素的文本值,必须更改元素的文本节点的值

范例-

xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue = "new content"
假设将“books.xml”加载到xmlDoc中

获取元素的第一个子节点


将节点值更改为“new content”

经过一周的案例研究和一些测试,我认为我找到了解决方法。不确定这是否是正确的方法,但它对我有效,因此我将发布我当前的解决方案以供将来参考

检查HTML后,我注意到Liferay UI:input localized标记默认情况下会创建一个input标记,然后每次选择新语言时,会为每种语言创建一个输入标记。知道我用Javascript创建了一些函数来帮助我更新从liferay ui创建的输入:输入本地化。以下是相关代码:

function updateAnnouncementInformation(index) {
    var announcement = announcements[index];

    // the announcement['message'] is a XML String
    updateInputLocalized('message', announcement['message']);
}

function updateInputLocalized(input, message) {
    var inputId = '<portlet:namespace/>' + input;
    var xml = $.parseXML(message);
    
    var inputCurrent = document.getElementById(inputId);
    var selectedLanguage = getSelectedLanguage(inputId);
    
    var inputPT = document.getElementById(inputId + '_pt_PT');
    inputPT.value = $(xml).find("Title[language-id='pt_PT']").text();
    
    var inputEN = document.getElementById(inputId + '_en_US');
    if (inputEN !== null) inputEN.value = $(xml).find("Title[language-id='en_US']").text();
    else waitForElement(inputId + '_en_US', inputCurrent, inputId, xml);
    
    var inputLabel = getInputLabel(inputId);
    if (selectedLanguage == 'pt-PT') inputLabel.innerHTML = '';
    else inputLabel.innerHTML = inputPT.value;
    
    if (selectedLanguage == 'pt-PT') inputCurrent.value = inputPT.value;
    else if (inputEN !== null) inputCurrent.value = inputEN.value;
    else waitForElement(inputId + '_en_US', inputCurrent, inputId, xml);
}

function getSelectedLanguage(inputId) {
    var languageContainer = document.getElementById('<portlet:namespace/>' + inputId + 'Menu');
    return languageContainer.getElementsByClassName('btn-section')[0].innerHTML;
}

function getInputLabel(inputId) {
    var boundingBoxContainer = document.getElementById(inputId + 'BoundingBox').parentElement;
    return boundingBoxContainer.getElementsByClassName('form-text')[0];
}

function waitForElement(elementId, inputCurrent, inputId, xml) {
    window.setTimeout(function() {
        var element = document.getElementById(elementId);
        if (element) elementCreated(element, inputCurrent, inputId, xml);
        else waitForElement(elementId, inputCurrent, inputId, xml);
    }, 500);
}

function elementCreated(inputEN, inputCurrent, inputId, xml) {
    inputEN.value = $(xml).find("Title[language-id='en_US']").text();
    
    var selectedLanguage = getSelectedLanguage(inputId);
    if (selectedLanguage == 'en-US') inputCurrent.value = inputEN.value;
}
函数更新信息(索引){
var公告=公告[指数];
//公告['message']是一个XML字符串
updateInputLocalized('message',公告['message']);
}
函数updateInputLocalized(输入、消息){
变量inputId=''+输入;
var xml=$.parseXML(消息);
var inputCurrent=document.getElementById(inputId);
var selectedLanguage=getSelectedLanguage(inputId);
var inputPT=document.getElementById(inputId+''u pt'u pt');
inputPT.value=$(xml).find(“Title[language id='pt_pt']”)text();
var inputEN=document.getElementById(inputId+''u en'u US');
if(inputEN!==null)inputEN.value=$(xml).find(“Title[language id='en_US']).text();
else waitForElement(inputId+''u en_US',inputCurrent,inputId,xml);
var inputLabel=getInputLabel(inputId);
如果(selectedLanguage='pt')inputLabel.innerHTML='';
else inputLabel.innerHTML=inputPT.value;
如果(selectedLanguage==“pt pt”)inputCurrent.value=inputPT.value;
如果(inputEN!==null)inputCurrent.value=inputEN.value,则为else;
else waitForElement(inputId+''u en_US',inputCurrent,inputId,xml);
}
函数getSelectedLanguage(inputId){
var languageContainer=document.getElementById(“”+inputId+“菜单”);
return languageContainer.getElementsByClassName('btn-section')[0].innerHTML;
}
函数getInputLabel(inputId){
var boundingBoxContainer=document.getElementById(inputId+'BoundingBox').parentElement;
返回boundingBoxContainer.getElementsByClassName('form-text')[0];
}
函数waitForElement(elementId、inputCurrent、inputId、xml){
setTimeout(函数(){
var element=document.getElementById(elementId);
if(element)element已创建(element、inputCurrent、inputId、xml);
else waitForElement(elementId、inputCurrent、inputId、xml);
}, 500);
}
已创建的函数元素(Input、inputCurrent、inputId、xml){
inputEN.value=$(xml).find(“Title[language id='en_US']”)text();
var selectedLanguage=getSelectedLanguage(inputId);
如果(selectedLanguage=='en US')inputCurrent.value=inputEN.value;
}

有了它,我可以根据预先构建的XML字符串更新liferay ui:input本地化的输入。我希望有人觉得这很有用,如果你有什么要补充的,请让我知道

我不知道你为什么否决了我的答案。如果我因为不理解问题而评论了错误的内容,那么您可以首先在评论中告诉我,这样我就可以了解我做错了什么。我的问题不是如何更改XML对象值。而是如何根据预构建的XML字符串更改标记liferay ui:input的值
function updateAnnouncementInformation(index) {
    var announcement = announcements[index];

    // the announcement['message'] is a XML String
    updateInputLocalized('message', announcement['message']);
}

function updateInputLocalized(input, message) {
    var inputId = '<portlet:namespace/>' + input;
    var xml = $.parseXML(message);
    
    var inputCurrent = document.getElementById(inputId);
    var selectedLanguage = getSelectedLanguage(inputId);
    
    var inputPT = document.getElementById(inputId + '_pt_PT');
    inputPT.value = $(xml).find("Title[language-id='pt_PT']").text();
    
    var inputEN = document.getElementById(inputId + '_en_US');
    if (inputEN !== null) inputEN.value = $(xml).find("Title[language-id='en_US']").text();
    else waitForElement(inputId + '_en_US', inputCurrent, inputId, xml);
    
    var inputLabel = getInputLabel(inputId);
    if (selectedLanguage == 'pt-PT') inputLabel.innerHTML = '';
    else inputLabel.innerHTML = inputPT.value;
    
    if (selectedLanguage == 'pt-PT') inputCurrent.value = inputPT.value;
    else if (inputEN !== null) inputCurrent.value = inputEN.value;
    else waitForElement(inputId + '_en_US', inputCurrent, inputId, xml);
}

function getSelectedLanguage(inputId) {
    var languageContainer = document.getElementById('<portlet:namespace/>' + inputId + 'Menu');
    return languageContainer.getElementsByClassName('btn-section')[0].innerHTML;
}

function getInputLabel(inputId) {
    var boundingBoxContainer = document.getElementById(inputId + 'BoundingBox').parentElement;
    return boundingBoxContainer.getElementsByClassName('form-text')[0];
}

function waitForElement(elementId, inputCurrent, inputId, xml) {
    window.setTimeout(function() {
        var element = document.getElementById(elementId);
        if (element) elementCreated(element, inputCurrent, inputId, xml);
        else waitForElement(elementId, inputCurrent, inputId, xml);
    }, 500);
}

function elementCreated(inputEN, inputCurrent, inputId, xml) {
    inputEN.value = $(xml).find("Title[language-id='en_US']").text();
    
    var selectedLanguage = getSelectedLanguage(inputId);
    if (selectedLanguage == 'en-US') inputCurrent.value = inputEN.value;
}