2

ここで明確にするためにお願いします。誤って createForm プロパティを false に設定しました。次に、別のページを開くリンクイベントが機能しなくなることを期待しました。これは、フォームの作成を無効にしたときのリンクなど、SSJS イベントの意図した動作ですか?

4

2 に答える 2

8

Per が言及しているように、すべてのイベントにはフォームが必要です。完全に更新された場合、ページにはリダイレクトをトリガーするために投稿するフォームが必要です。部分的な更新の場合、フォームは AJAX POST の内容を決定します。

XPages ランタイムにはフォーム コンポーネントのサポートが含まれていますが、コンポーネント パレットには含まれていません (また、デザイナーの設定を使用して追加することもできません)。そのため、ページに追加するには、ソース XML を直接編集するしか方法がありません。例えば:

<xp:form>
    <xp:link id="exampleLink" text="Example Text">
        <xp:eventHandler event="onclick" submit="true" refreshMode="complete">
            <xp:this.action><![CDATA[#{javascript:// event code}]]></xp:this.action>
        </xp:eventHandler>
    </xp:link>
</xp:form>

このコンポーネントが役立つ理由は (少なくとも) 2 つあります。

  1. パフォーマンスを向上させることができます。ページに機能的に異なるさまざまな領域が含まれている場合 (つまり、ページのある部分のイベントは、ページの他の部分のデータを認識する必要がない場合)、各セクションを個別のフォーム コンポーネントでラップします。各イベントは、イベントをトリガーするコンポーネントと同じフォーム内に含まれるデータのみを投稿します。createFormあなたの質問は、に設定したときにリンクが壊れたことを示していますfalseユーザーを別のページに移動する必要があります。したがって、ユーザーが現在のページを離れようとしているため、このイベントはフィールド値について知る必要がない可能性があります。そうであれば、このリンクを独自のフォームにラップし、フィールドを別のフォームにラップすると、ブラウザはフィールド データを送信する必要がないため、リンク自体の識別子だけを送信する必要がなくなるため、リンクのパフォーマンスがわずかに向上します。
  2. スタイルの柔軟性を提供できます。開発者は、実際のエンド ユーザーの要件とは別に、Domino に慣れていない設計者から事前に決定された CSS を受け取るのが一般的です。これは、ドミノが生成するマークアップと一見矛盾する特定の仮定を設計者が行った場合に、緊張の原因となることがよくあります。これの最も一般的な例の 1 つは、サイトに検索機能が含まれている場合です。これは、ほとんどの Web 開発者が検索用に 1 つのフォームを持ち、他のフィールド用に別の兄弟フォームを持っているためです。これにより、デザイナーまたは開発者のいずれかが、すべてのコンテンツを囲む単一のフォーム タグを考慮して、デザイナーが既に開発したスタイルシートを修正する必要がある場合、プロジェクトのコストが増加する可能性があります。要するに、

そのため、XPage で 1 つ以上のフォーム コンポーネントを使用する方が実際に望ましいユース ケースが数多くあります。ただし、すべてのデータとイベントはフォーム内にある必要があることに注意してください。通常はすべてのコンテンツを囲むデフォルト フォームか、手動でフォーム コンポーネントを含めました。フォームはネストできません。必要な数のフォーム コンポーネントを追加できますが、それらは兄弟である必要があります。フォームに別のフォームを含めることはできません。

于 2013-04-07T05:58:18.720 に答える
3

はい、HTTP POST リクエストを実行しており、フォームが必要なためです。

SSJS イベントを削除して代わりに「基本」リンクを作成する代わりに、POST リクエスト リンクを GET リクエスト リンクに変換できます。

<xp:link escape="true" text="Link" id="link2" value="/somepage.xsp"></xp:link>

ただし、SSJS ロジックが必要な場合は、フォームも必要です。

于 2013-04-07T04:33:31.463 に答える