-1

到目前为止,我已经能够通过搜索网络解决所有与 XPages 相关的问题,但是这个问题一直让我发疯,我真的可以使用一些帮助:

在我的 XPage 上,我有一个带有动态数据源的面板(计算 documentid 和 action(值来自sessionScope))。在这个面板中,我有多个通过“简单绑定”绑定到数据源的编辑框。在面板之外,我有一个组合框,用户可以在其中选择要显示的文档和创建新文档的按钮。当组合框值更改时,我将 documentid 和 action 放入sessionScope并执行面板的部分更新。一切正常,文件以正确的方式显示。当我按下按钮创建一个新文档 (documentid="",action="newDocument") 时,我得到一个新文档,并且面板中的编辑框是空的,就像它应该的那样。

但是,如果我在创建新文档后从组合框中选择现有文档,则编辑框不会更新,但与我刚刚创建的文档中的相同。我发现部分刷新适用于数据源(documentid 是正确的),但似乎数据绑定不起作用,这意味着文档中的值没有写入编辑框。之后,如果我从组合框中选择另一个文档或执行另一个部分刷新,数据绑定会突然再次起作用。

有谁知道如何解决这个问题?为什么我需要在这里进行 2 次部分刷新?

我试图解决这个问题但没有奏效:

  1. 将数据源的范围更改为请求
  2. 执行完全更新,而不是仅对面板进行部分更新
  3. 设置ignorerequestparametertrue
  4. 所有可能的设置computewithform

我知道我可以手动将文档中的数据写入编辑框,但我认为应该可以在没有解决方法的情况下解决这个问题。

4

3 回答 3

1

这是一些 Java 代码的 SSJS 端口,当更改 bean 值服务器端时,我使用它来重置绑定到 bean 的字段的本地字段值。如果不这样做,UI 字段将显示“旧”值。

SSJS 未经测试,因此可能存在拼写错误。希望你会弄清楚如果你得到错误。

function resetComponentAndChildren( component ) {
    if( component instanceof javax.faces.component.EditableValueHolder ) {
        // Reset value bindings on component
        var valueHolder = component;
        valueHolder.setSubmittedValue( null );
        valueHolder.setValue( null );
        valueHolder.setLocalValueSet( false );
        valueHolder.setValid( true );
    }

    var children = component.getChildren();
    for ( var i = 0; i < children.length; i++ ) {       
        resetComponentAndChildren( children[i] );
    }
}

function resetRefreshTargetAndChildren(){
    var refreshId = param.get( "$$ajaxid" ).replaceFirst( "^view:", "" );
    var refreshTarget = view.findComponent( refreshId );
    resetComponentAndChildren( refreshTarget );
}

resetRefreshTargetAndChildren用于重置部分刷新区域的字段。如果您的组合框事件导致刷新包含所有文档字段的区域,它应该满足您的需求(如果您的问题与我对 bean 的问题相同)。在组合框的 onChange 事件中调用它。

于 2012-09-26T05:48:31.473 回答
0

通过为数据源尝试许多可能的参数组合以及刷新选项,我找到了解决方案:

在执行面板的部分刷新时,我必须在“服务器选项”中将“未经验证的处理数据”设置为 true 。我无法解释为什么它现在有效,特别是因为我什至不使用任何字段验证。然而,它有效!

于 2012-09-26T06:41:45.777 回答
0

我确定您想做的事情是可能的……尽管我需要查看您的代码来模拟一些东西来玩它。当然,您会希望设置 ignoreRequestParams。我通常会不惜一切代价避免使用 computeWithForm。

虽然您应该能够通过数据绑定使其工作,但我通常更倾向于不将此类内容的编辑字段绑定到文档数据源。我想我会让它们不受约束,然后使用 SSJS 填充这些值,然后保存这些值。我不认为这是一种“解决方法”或“黑客”——在我看来,这只是另一种有效的方法。

于 2012-09-25T15:39:37.593 回答