Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 PrimeFaces p:为Spring Security选择布尔复选框;“记住我”;更改导致“";“记住我”;失败_Jsf 2_Spring Security_Primefaces - Fatal编程技术网

Jsf 2 PrimeFaces p:为Spring Security选择布尔复选框;“记住我”;更改导致“";“记住我”;失败

Jsf 2 PrimeFaces p:为Spring Security选择布尔复选框;“记住我”;更改导致“";“记住我”;失败,jsf-2,spring-security,primefaces,Jsf 2,Spring Security,Primefaces,我有一个JSF页面,其中包含以下组件: <p:selectBooleanCheckbox id="_spring_security_remember_me" label="Remember Me"/> 因此,“记住我”功能无法找到参数。我怎样才能解决它?我可以告诉PrimeFaces不要在它后面加上\u input,或者我可以告诉Spring Security为“记住我”复选框寻找不同的请求参数名称吗? 您可以通过在元素中传递名称来解决问题“ 编辑: 由于您无法为输入设置名称

我有一个JSF页面,其中包含以下组件:

<p:selectBooleanCheckbox id="_spring_security_remember_me" label="Remember Me"/>
因此,“记住我”功能无法找到参数。我怎样才能解决它?我可以告诉PrimeFaces不要在它后面加上
\u input
,或者我可以告诉Spring Security为“记住我”复选框寻找不同的请求参数名称吗?

您可以通过在元素中传递名称来解决问题“


编辑:


由于您无法为输入设置名称,我想您最好的做法是更改RememberMe服务的参数。有关更多信息,请参阅。

这是primefaces中的常见做法。所有组件都放置在指定公共css属性等的div块中。此div块获取id,因为它是组件的根元素。所有其他必须可识别的重要子元素(如本例中的输入元素)将获得原始id+
\u foo

如果您想在客户端读取组件的值,可以使用属性
widgetVar
指定引用组件的支持jquery对象的全局js var。打开调试器以了解它具有哪些属性。这些js类大多未记录


如果您需要服务器端的id,尽管它会变得有点复杂。首先,您必须使用
绑定
attibute将组件模型注入到您的支持bean中。现在有了
SelectBooleanCheckbox
模型,您可以调用
String clientId=checkbox.getClientId(FacesContext.getCurrentInstance());
检索客户端id。现在获取输入id是简单的字符串操作:
string inputId=clientId+“\u input”;


如果您不确定组件在客户端的行为,您可以查看其模型和渲染器。在这种情况下,两者都位于
org.primefaces.component.selectbooleancheckbox
包中。

我的解决方案:

<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>


放置一个名为“parameter”的属性“其值等于primefaces生成的id/名称。

对什么进行否决表决?因为我没有经验?至少告诉我在你否决这个问题后我该怎么办。我不介意。这对我来说是正常的行为。可能有人否决了这个问题,因为这个问题不是一个合法的问题。如果我理解正确,代码工作正常吗?我需要一个特定的id字符串转发到spring安全登录服务。但是primefaces强制id和名称具有后缀“\u input”。我该怎么办?我应该使用javascript强制更改id吗?为什么要把后缀放在第一位,我不明白。不,它没有在接口中定义。他们有什么理由强迫这种行为吗?在不提供任何更改默认设置的选项的情况下:/@William将显示它们呈现组件的方式,并且有意义。组件不仅仅由
标记本身组成。将id分配给组件容器是实际的,并且将组件“声明”为独立的隔离系统。
<p:selectBooleanCheckbox id="_spring_security_remember_me" name="_spring_security_remember_me" label="Remember Me"/>
<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>