2

このコンポーネントを含むJSFページがあります。

<p:selectBooleanCheckbox id="_spring_security_remember_me" label="Remember Me"/>

SpringSecurityでは正確な入力フィールドID/名前_spring_security_remember_meが必要です。ただし、PrimeFacesは_input次のように接尾辞を付けて生成します。

<div id="_spring_security_remember_me" class="ui-chkbox ui-widget">
  <div class="ui-helper-hidden-accessible">
    <input id="_spring_security_remember_me_input" name="_spring_security_remember_me_input" type="checkbox" />
  </div>
  <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon"></span></div>
</div>

したがって、「Rememberme」機能はパラメータを見つけることができません。どうすれば解決できますか?PrimeFacesに接尾辞を付けないように指示できますか_input、またはSpring Securityに「Rememberme」チェックボックスの別のリクエストパラメーター名を探すように指示できますか?

4

3 に答える 3

2

私の解決策:

<security:remember-me key="remember-me-security" services-ref="rememberMeServices"/>

<bean id="rememberMeServices" class="com.triune.services.CustomTokenBasedRememberMeService">
    <property name="key" value="remember-me-security" />
    <property name="cookieName" value="TRIUNE" />
    <property name="tokenValiditySeconds" value="1209600" />
    <property name="useSecureCookie" value="true" />
    <property name="userDetailsService" ref="customUserDetailsService" />
    <property name="alwaysRemember" value="false" />
    <property name="parameter" value="_spring_security_remember_me_input"/>
</bean>

Primefacesが生成するid/nameと等しい値を持つ「parameter」という名前のプロパティを配置します。

于 2012-09-03T08:30:16.220 に答える
0

要素に名前を渡すことで、発生している問題を解決できます。」

<p:selectBooleanCheckbox id="_spring_security_remember_me" name="_spring_security_remember_me" label="Remember Me"/>

編集:

入力に名前を設定することはできないので、remember-me-serviceのパラメーターを変更するのが最善の策だと思います。詳細については、この質問と回答を参照してください。

于 2012-08-21T10:23:46.947 に答える
0

これは、primefacesでは一般的な方法です。すべてのコンポーネントは、共通のcssプロパティなどを指定するdivブロック内に配置されます。このdivブロックは、コンポーネントのルート要素であるため、IDを取得します。識別可能でなければならない他のすべての重要な子要素(たとえば、この場合は入力要素など)は、元のID+が_foo割り当てられます。

クライアント側でコンポーネントの値を読み取りたい場合は、属性を使用してwidgetVar、コンポーネントのバッキングjqueryオブジェクトを参照するグローバルjs変数を指定できます。デバッガーの電源を入れて、デバッガーのプロパティを確認します。これらのjsクラスはほとんど文書化されていません。


サーバーサイドでIDが必要な場合は、少し複雑になりますが。まず、属性を使用してコンポーネントモデルをバッキングBeanに注入する必要がありますbinding。これで、クライアントIDを取得するためにSelectBooleanCheckbox呼び出すことができるモデルができました。String clientId = checkbox.getClientId(FacesContext.getCurrentInstance());入力IDの取得は、単純な文字列文字列操作です。String inputId = clientId + "_input";


コンポーネントがクライアント側でどのように動作するかわからない場合は、いつでもそのモデルとレンダラーを確認できます。この場合、両方がorg.primefaces.component.selectbooleancheckboxパッケージに含まれています。

于 2012-08-21T10:57:26.450 に答える