我在我的Xpage上使用eventhandler来保存我的数据源(frmData):
<xp:eventHandler
id="saveEventHandler"
submit="true"
save="true"
event="calledbyid"
refreshMode="complete"
>
<xp:this.action><![CDATA[#{javascript:frmData.save();
context.redirectToPage("index.xsp")}]]></xp:this.action>
</xp:eventHandler>
这是由自定义专业人士调用的:
<xe:basicLeafNode
onClick="XSP.executeOnServer('#{id:saveEventHandler}')"
label="Save"
rendered="#{javascript:currentDocument.isEditable()}"
>
</xe:basicLeafNode>
这是客户到服务器站点触发器的Jeremy Hodge先生代码:
XSP.executeOnServer = function () {
// must supply event handler id or we're outta here....
if (!arguments[0])
return false;
// the ID of the event handler we want to execute
var functionName = arguments[0];
// OPTIONAL - The Client Side ID that you want to partial refresh after executing the event handler
var refreshId = (arguments[1]) ? arguments[1] : "@none";
var form = (arguments[1]) ? this.findForm(arguments[1]) : dojo.query('form')[0];
// catch all in case dojo element has moved object outside of form...
if (!form)
form = dojo.query('form')[0];
// OPTIONAL - Options object contianing onStart, onComplete and onError functions for the call to the
// handler and subsequent partial refresh
var options = (arguments[2]) ? arguments[2] : {};
// OPTIONAL - Value to submit in $$xspsubmitvalue. can be retrieved using context.getSubmittedValue()
var submitValue = (arguments[3]) ? arguments[3] : '';
// Set the ID in $$xspsubmitid of the event handler to execute
dojo.query('[name="$$xspsubmitid"]')[0].value = functionName;
dojo.query('[name="$$xspsubmitvalue"]')[0].value = submitValue;
this._partialRefresh("post", form, refreshId, options);
}
表单上的所有字段值都已保存,但Rich文本项除外。
当我使用简单的按钮onclick事件而不是使用上面的甚至处理程序时,Rich文本项保存!!
<xp:button
value="Label"
id="button1"
xp:key="facet_3"
>
<xp:eventHandler
event="onclick"
submit="true"
refreshMode="complete"
>
<xp:this.action>
<xp:saveDocument
var="frmData"
>
</xp:saveDocument>
</xp:this.action>
</xp:eventHandler>
</xp:button>
请告诉我如何处理此事件处理程序?
-mak
答案 0 :(得分:0)
我不知道问题是使用Rich Text Item还是提交方法。我注意到的一件事是你只将一个参数传递给XSP.executeOnServer(),因此它将推断提交ID和提交值。
您是否可以使用Firebug或类似内容来检查提交回服务器的内容,无论是在单击按钮时还是在XPage的其余生命周期中?从问题中解决页面生命周期过程很困难。
如果没有将提交ID或提交值传递回服务器,则单击该按钮时,页面上的数据源或组件不会更新。它将使用以前部分刷新中针对数据源存储的任何值来保存数据源。
每当触发部分刷新时,某些内容将在XPage的服务器端映射中更新。因此,在触发XSP.executeOnServer()之前,任何先前的部分刷新都可以使用值更新数据源。如果值已通过部分刷新传递回数据源,那么这些值将被保存,因为它们已经存在于数据源中,而不是因为XSP.executeOnServer()再次传递它们。
如果Firebug显示提交ID或提交值,其中包含传递回服务器的数据源,则值将传递回数据源,在这种情况下,可能存在特定于Rich Text Items的问题。