JSFサーバー側の検証後に、失敗したフィールドを強調表示するための要件に取り組んでいます。検証のためにjavascriptを使用することはできません。 cssスタイルの変更とサーバー側の検証をリンクする方法はありますか?JSFバリデーションを使用したCssスタイルの変更
答えて
あなたは管理Beanでこれを行うことができます:
public class ValidBean {
private UIComponent myComponent;
public UIComponent getMyComponent() {
return myComponent;
}
public void setMyComponent(UIComponent myComponent) {
this.myComponent = myComponent;
}
public String getErrorStyle() {
FacesContext context = FacesContext
.getCurrentInstance();
String clientId = myComponent.getClientId(context);
Iterator<FacesMessage> messages = context
.getMessages(clientId);
while (messages.hasNext()) {
if (messages.next().getSeverity().compareTo(
FacesMessage.SEVERITY_ERROR) >= 0) {
return "background-color: red";
}
}
return null;
}
}
Requestスコープの変数:
<managed-bean>
<managed-bean-name>validBean</managed-bean-name>
<managed-bean-class>stylevalid.ValidBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
サンプルビュー:
<f:view>
<h:form>
<h:inputText binding="#{validBean.myComponent}" styleClass="foo"
style="#{validBean.errorStyle}">
<f:validateLength minimum="6" />
</h:inputText>
<h:commandButton />
<h:messages />
</h:form>
</f:view>
コンポーネントをバッキングBeanにバインドされています。エラーメッセージがコンポーネントのキューに入れられている場合、そのCSSクラス設定はそのスタイル属性で上書きされます。
シームフレームワークは非常に簡単です。これをチェックしてください:http://www.redhat.com/docs/manuals/jboss/jboss-eap-4.2/doc/seam/Seam_Reference_Guide/JSF_form_validation_in_Seam.html
こんにちは、このメソッドはうまく見えますが、現在のプロジェクトで継ぎ目を使用していません...残念ですが、Seamコンストラクトが多くの場合に本当に助けになるからです。 – Barun
ご迷惑をおかけして申し訳ありません。 Seamは本当にJSFのキラーアプリです。しかし、私はSeamを使用しないJSFアプリケーションに取り組んでおり、ページフローを邪魔にして状態を維持しているのを見ているので、共感できます。 – Drew
ここに同じ状態...状態を維持することに関連する問題...私たちはSpring Webflowを使っています...しかし、別のトピックのためです... – Barun
- 1. CSSスタイルの変更/クラスまたはJavaScriptを使用したスタイルのアニメーション?
- 2. 押した後にボタンのスタイルを変更する - CSS
- 3. CSSでアンカータグのスタイルを変更する
- 4. javascriptを使用してCSSクラス全体のスタイルを変更する
- 5. JSF dataTable rerenderがCSSスタイルを失う
- 6. Cssの順不同リストの変更スタイル?
- 7. Ajax + JSONを使用して動的にエレメントCSSスタイルを変更する
- 8. jqueryでCSSスタイルを変更する
- 9. インラインフレームの変更内容CSSスタイル
- 10. JSFを使用したブラウザ依存のCSSスイッチ
- 11. CSSを使用した画像のサイズ変更とトリミング
- 12. CKEditorのCSSクラスを使用した非独占的スタイルのルール
- 13. jqueryバリデーションを使用したAjaxフォーム
- 14. jQuery:jqueryバリデーションを使用したティップチップ
- 15. CSSを使用したHTMLタイトル属性のスタイル設定
- 16. ネイティブCSSとHTMLを使用したファンネルスタックレイアウトのスタイル設定
- 17. CSSを使用したテキストエリアのサイズ変更と行と列の使用
- 18. DOMスタイルを使用してJavascriptでCSSクラスプロパティを取得または変更する
- 19. SelectedRowStyle定義されたCSSスタイルのセルのBgColorを変更しない
- 20. バインディングを使用してスタイルの変更をトリガーする
- 21. スタイルHTMLエレメント(CSSを使用したタイトルに基づく)
- 22. JSF用外部CSS
- 23. JSFでのフォーム入力のネイティブJavaScriptバリデーション
- 24. CSSを使用してテキストエリアのサイズ変更ボタンのカーソルスタイルを変更する
- 25. jquery実際のCSSスタイルを変更する
- 26. jQueryプラグインのCSSスタイルを変更するには?
- 27. php + cssでアクティブなメニューのスタイルを変更する方法
- 28. CSSスタイルのバインディングに基づいてaria-labelを変更する
- 29. jquery ui datapickerのスタイル(CSS)を変更するには
- 30. (CSS)を変更する要素のスタイルが
こんにちは、このメソッドはよく見えるし、動作もjspに豆のCSSスタイルを注入している標準的な練習はJSFです。メンテナンスの観点からは、Javaクラスで変更が行われなければならないことが完全に明らかです。そして、別のスタイル要素を追加したい場合、それは可能ではありません。それは私のための要因ではありませんが、私はただの将来の問題を心配していました。 – Barun
もう少し良い方法は、styleClass属性を動的に決定することです。そうすれば、JavaクラスではなくCSSファイルを変更するだけで済みます。 – Drew
@Barun - あなたは正しいです。理想的なソリューションではありません。コアコンポーネントは少し基本的な傾向があります。より豊かな経験のためにコントロールライブラリへのフォークルック。代わりに、errorStyleをブール値にして、関数を介してスタイル値を解決することもできます。#{myfn:resolve(validBean.errorStyle、 'szErrStyle'、 'szOkStyle')}そうすれば、バックエンドに漏れるプレゼンテーションレイヤの詳細が少なくなります。 – McDowell