0

基本的な問題
SpringMVCフォームタグを「ラップ」する独自のカスタムJSPタグを作成しているときに、少し問題が発生しました。他のタグを正常にラップしましたが、selectタグとoptionsタグでスタックが解除され、IlleagalStateExceptionがスローされます。スプリングコードをデバッグしたところ、optionsタグが祖先のselectタグを探していることがわかりました。私はタグファイルでこれを行っているので、春の選択タグは実際には別のタグファイルにあります。それが見つからない理由だと思います。

だから問題は、これを回避するために私が何ができるかということです。

考えられる解決策
私は解決策を探してみましたが、私が見つけたのは、同じ問題を抱えているが解決策が投稿されていない他の人々だけです。スプリングタグを使用せずに独自のselectタグとoptionsタグを作成することを考えましたが、無料で提供されるバインディングを複製する必要はありません。タグファイルではなくJavaクラスを使用するように変更してもかまいませんが、出力がJSPとして評価されないため、別のJSPタグを出力できないことが以前にわかりました。

これを行う理由
最初に質問してから1週間これについて考えたので、私は今、何を達成したいのかが明確になりました。

  • JSPで必要なマークアップを簡素化するため
  • 一般的なコードの因数分解(例:入力後のフォーム:エラーまたはspring:messageからの翻訳の取得)
  • ルックアンドフィールをカプセル化するには(CSSは大いに役立ちますが、多くの場合、マークアップも変更する必要があります)
  • スプリングタグの機能を拡張する拡張コンポーネントを構築できるようにする(たとえば、複数選択を選択リストとしてレンダリングする、または読み取り専用入力をテキストラベルとして表示する)

人々の意見を聞いてみたいと思います。ありがとう

4

2 に答える 2

1

まず、スタイリングを制御したいという意味がわかりません。クラスとIDの属性をSpringタグに渡すことができ、それらがコピーされたと思いました(?-最近Grailsアプリを作成しているため、Grailタグと混同される可能性があります)。編集:さらに、外部要素を参照することで、Springで生成されたタグのスタイルを設定できます。たとえば、フォーム要素をdivで囲み、次のようにフォーム要素のスタイルを設定します#myDiv input { color: red; }

私の経験(10年以上のwebapp開発者)から、アプリを将来にわたって利用できるようにするために余分な努力をする価値はありません。Spring MVCのようなフレームワークを選択すると、多くのものを無料で入手できます。通常は、自分で作成する必要があります。この無料のもののコストは、(あなたが言ったように)ある程度のロックインです。春は、この側面に関してはかなり良いです-あなたは好きなだけ使うことができます、そしてそれは通常、将来必要になった場合にそれを設計するのにかなり簡単です。

だから私の見解は:Springタグを「そのまま」使用することです。将来、Springアスペクトを削除する必要がある可能性は非常に低いです。そのため、そのシナリオが発生した場合、または発生するまで、「延期」する価値のあるリスクがあります。Springタグを削除するのに費やしたのと同じくらい、将来を見据えたソリューションを設計するためにすでに多くの時間とコードを費やしている可能性があります。これは、Springタグが提供するメリットを上回っています。そしてそれに加えて-あなたはそのコードを書いたので、あなたや他の誰かが今そのコードを維持しなければならないでしょう-Spring開発者にあなたのためにコードを維持させるのとは対照的です。

最後に、このロックインを本当に必要とせず、スタイリングを完全に制御したい場合は、フォーム要素を手動で記述します。

<select name="foo_select">
    <option value="">-- select a foo type --</option>
    <c:forEach var="foo" items="${fooGroups}">
        <option value="${foo}">${foo}</option>
    </c:forEach>
</select>
于 2012-10-29T23:05:22.030 に答える
0

私はこれについて良い週について考えました、そしてこれは候補リストです:

  • 諦めて、JSPのスプリングタグを直接使用します
  • スプリングタグをまったく使用せず、自分のタグでロジックを複製します
  • おそらく、春のタグクラスを拡張または利用するタグクラスを作成します
  • タグの範囲を拡張して、selectタグとoptionsタグの両方をラップします

これを実行したい理由(質問で明らかにしました)を考慮して、最後のオプションを選択することにしました。もともとは何百ものパラメータになるかもしれないと思っていたので、これには熱心ではありませんでしたが、実際にはそれほど悪くはありません。タグファイルは、マークアップの一般的なビットをラップするように設計されているため、これが目的です。また、自分のタグをさらにラップしたので、カスタム選択タグを出力し、それを初期化するために必要なJSを書き込む選択リストタグがあります。

これは、私が達成したかったことに基づいて、私が遭遇した可能な解決策の中で最高のものだと思います。これは私が行っていることですが、他の人々がもっと良いものを持っていると思ったら、それでも他の人々の解決策について聞いてみたいと思います。

于 2012-11-05T16:08:07.430 に答える