gpt4 book ai didi

javascript - XPages getComponent() 无法正常工作

转载 作者:行者123 更新时间:2023-11-29 23:28:08 24 4
gpt4 key购买 nike

我有一个 XPage,它使用 JQuery 对话框和客户端验证来验证用户处理的输入。问题是,当我单击“添加”按钮时,客户端验证有效,但“无法”在服务器端找到这些字段的属性。当用户单击“打开对话框”按钮时,对话框会出现,这是我的按钮,神奇的地方发生了(只有一个属性,仅举个例子):

<xp:button id="save_part_btn" value="+Add" style="float:right;">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:
/*
var estdoc:NotesDocument=database.getDocumentByUNID(doc_source.getDocument().getParentDocumentUNID())
var estPartdoc:NotesDocument=estdoc.getParentDatabase().createDocument()

Ignore it

estPartdoc.replaceItemValue('Form','Estimate_Cost_Part')
estPartdoc.replaceItemValue('Predoc',estdoc.getUniversalID())
estPartdoc.replaceItemValue('$OSN_IsSaved','1')
*/

estPartdoc.replaceItemValue('TSNB_All',getComponent('input_tsnb_all').getValue())

}]]></xp:this.action>

<xp:this.script><![CDATA[

var isValid = true;
var result = "";

function isStringEmpty(string2Check)
{
return string2Check == "" || string2Check[0] == " ";
}

function isNumberCorrect(number2Check)
{
return /^[1-9]\d*(,\d{1,3})?$/.test(number2Check.toString());
}


if(isStringEmpty(document.getElementById("#{id:input_tsnb_all}").value))
{
wholeValid = false;
result += '-The field cannot be empty\n'
}
else if(!isNumberCorrect(document.getElementById("#{id:input_tsnb_all}").value))
{
wholeValid = false;
result += '-The field is not correct\n'
}

if(!isValid)
alert(result)
return isValid;

]]></xp:this.script>
</xp:eventHandler>
</xp:button>

客户端验证工作完美 - 当用户输入不正确时 alert显示消息。然而,input_tsbn_all在服务器端找不到,无法创建具有此属性的文档。实际上它确实如此,但是 input_tsbn_all 的值在 null 中.有什么问题?

该属性的标记是:

<xp:tr>
<xp:td><xp:label value="All:"/></xp:td>
<xp:td>
<xp:inputText id="input_tsnb_all"
disableClientSideValidation="true"
styleClass="doc_field_textinput" size="40" >
<xp:this.converter>
<xp:convertNumber pattern="0.000"></xp:convertNumber>
</xp:this.converter>
</xp:inputText>
</xp:td>
</xp:tr>

我的 JQuery 代码:

    var dialogAddPartDiv = $('.dialogAddPart'); 

$('.addButton').click(function()
{
dialogAddPartDiv.dialog('open');
});

dialogAddPartDiv.dialog(
{
create: function (event, ui) {


$(".ui-corner-all").css('border-bottom-right-radius','8px');
$(".ui-corner-all").css('border-bottom-left-radius','8px');
$(".ui-corner-all").css('border-top-right-radius','8px');
$(".ui-corner-all").css('border-top-left-radius','8px');

$(".ui-dialog").css('border-bottom-left-radius','0px');
$(".ui-dialog").css('border-bottom-right-radius','0px');
$(".ui-dialog").css('border-top-left-radius','0px');
$(".ui-dialog").css('border-top-right-radius','0px');

$('.ui-dialog-titlebar-close').css('margin', '-25px -20px 0px 0px').css('border', 'solid 2px').css('border-radius', '15px').css('border-color', '#05788d');
$('.ui-dialog-titlebar-close').css('width', '25px').css('height', '25px');
},

autoOpen: false,
modal: true,
beforeClose : function(event)
{
if(!confirm("This won't be saved. Continue?"))
{
return false;
}
else
{

}
},
width:600,
resizable: false
});
document.getElementsByClassName('ui-dialog-titlebar-close')[0].setAttribute('title', 'Close it?');

而隐藏的 div 只是在页面上这样声明:<xp:div styleClass="dialogAddPart">

最佳答案

您需要将输入绑定(bind)到通过请求持续存在的对象属性。一个愚蠢的例子可能是利用 viewScope Map 对象。

<xp:inputText id="input_tsnb_all" value="#{viewScope.myInput}">
...

稍后您将在代码中执行的操作是查找 viewScope.myInput变量来做你想做的事,而不是在 ViewRoot 中查找组件树。

我最好的建议是鼓励您建立一些 JSF 基础知识,以便理解为什么要这样做。

唉,XPages 使其成为 JSF 最糟糕的可能迭代,以正确的方式学习东西。其中大部分插入了一个基本概念 - 旧的 Notes 开发人员思维方式 - 阻止您按照预期的方式使用框架,即 MVC。

我不会告诉您避免这样做,因为您在 Internet 上看到的关于该主题的大部分内容都是老式的汤。但是,如果您在意,哪怕是一点点,都可以拿一本不太新的 JSF 书并从中学习。或者,您可能想免费查看 here .当然,您需要将阅读的内容与 XPages 中实际可用的内容进行调解,因为我很遗憾,XPages 本身就是对 JSF 的一种解释。

关于javascript - XPages getComponent() 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48320750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com