0

我在我的 Xpage 上使用事件处理程序来保存我的数据源(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);
}

表单上的所有字段值都已保存,但富文本项除外。

当我使用简单的按钮 onclick 事件而不是使用上面的处理程序时,保存了富文本项!

<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>

请让我知道如何处理这个事件处理程序?

-麦

4

1 回答 1

0

我不知道问题出在富文本项还是提交方法上。我注意到的一件事是您只将一个参数传递给 XSP.executeOnServer(),因此它将推断提交 ID 和提交值。

您可以使用 Firebug 或类似的东西来检查哪些内容被提交回服务器,无论是在您单击按钮时还是在 XPage 的其余生命周期期间?很难根据问题对页面生命周期过程进行故障排除。

如果未将提交 ID 或提交值传回服务器,则单击按钮时不会更新页面上的数据源或组件。它只会将数据源与之前部分刷新时针对数据源存储的任何值一起保存。

每当触发部分刷新时,XPage 的服务器端映射中的一些内容将被更新。因此,任何先前的部分刷新都可能在触发 XSP.executeOnServer() 之前使用值更新数据源。如果通过部分刷新将值传回数据源,则这些值将被保存,因为它们已经在数据源中,而不是因为它们由 XSP.executeOnServer() 再次传递。

如果 Firebug 显示的提交 id 或提交值包含传回服务器的数据源,则这些值将传回数据源,在这种情况下,可能存在特定于富文本项的问题。

于 2013-06-14T12:46:52.707 回答