ここで明確にするためにお願いします。誤って createForm プロパティを false に設定しました。次に、別のページを開くリンクイベントが機能しなくなることを期待しました。これは、フォームの作成を無効にしたときのリンクなど、SSJS イベントの意図した動作ですか?
2 に答える
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 つあります。
- パフォーマンスを向上させることができます。ページに機能的に異なるさまざまな領域が含まれている場合 (つまり、ページのある部分のイベントは、ページの他の部分のデータを認識する必要がない場合)、各セクションを個別のフォーム コンポーネントでラップします。各イベントは、イベントをトリガーするコンポーネントと同じフォーム内に含まれるデータのみを投稿します。
createForm
あなたの質問は、に設定したときにリンクが壊れたことを示していますfalse
ユーザーを別のページに移動する必要があります。したがって、ユーザーが現在のページを離れようとしているため、このイベントはフィールド値について知る必要がない可能性があります。そうであれば、このリンクを独自のフォームにラップし、フィールドを別のフォームにラップすると、ブラウザはフィールド データを送信する必要がないため、リンク自体の識別子だけを送信する必要がなくなるため、リンクのパフォーマンスがわずかに向上します。 - スタイルの柔軟性を提供できます。開発者は、実際のエンド ユーザーの要件とは別に、Domino に慣れていない設計者から事前に決定された CSS を受け取るのが一般的です。これは、ドミノが生成するマークアップと一見矛盾する特定の仮定を設計者が行った場合に、緊張の原因となることがよくあります。これの最も一般的な例の 1 つは、サイトに検索機能が含まれている場合です。これは、ほとんどの Web 開発者が検索用に 1 つのフォームを持ち、他のフィールド用に別の兄弟フォームを持っているためです。これにより、デザイナーまたは開発者のいずれかが、すべてのコンテンツを囲む単一のフォーム タグを考慮して、デザイナーが既に開発したスタイルシートを修正する必要がある場合、プロジェクトのコストが増加する可能性があります。要するに、
そのため、XPage で 1 つ以上のフォーム コンポーネントを使用する方が実際に望ましいユース ケースが数多くあります。ただし、すべてのデータとイベントはフォーム内にある必要があることに注意してください。通常はすべてのコンテンツを囲むデフォルト フォームか、手動でフォーム コンポーネントを含めました。フォームはネストできません。必要な数のフォーム コンポーネントを追加できますが、それらは兄弟である必要があります。フォームに別のフォームを含めることはできません。
はい、HTTP POST リクエストを実行しており、フォームが必要なためです。
SSJS イベントを削除して代わりに「基本」リンクを作成する代わりに、POST リクエスト リンクを GET リクエスト リンクに変換できます。
<xp:link escape="true" text="Link" id="link2" value="/somepage.xsp"></xp:link>
ただし、SSJS ロジックが必要な場合は、フォームも必要です。