通过p:remoteCommand向Springbean提供参数

通过p:remoteCommand向Springbean提供参数,spring,jsf,primefaces,jsf-2.2,remotecommand,Spring,Jsf,Primefaces,Jsf 2.2,Remotecommand,下面的XHTML通过将中的选定值设置为请求范围的bean 语言属性在中初始化为所选语言。这一切都是在JSF管理的bean中完成的 如果这个bean由Spring维护,如下所示 @Controller @Scope("request") public final class IntermediateLocaleBean { //Do something to initialize the property - language. //@ManagedProperty would

下面的XHTML通过
中的选定值设置为请求范围的bean

语言
属性在
中初始化为所选语言。这一切都是在JSF管理的bean中完成的


如果这个bean由Spring维护,如下所示

@Controller
@Scope("request")
public final class IntermediateLocaleBean
{
    //Do something to initialize the property - language.
    //@ManagedProperty would not work as this bean is managed by Spring.
    //It is not initialized to the selected language in <p:selectOneMenu>.
    //It is null.

    private String language;

    //The session scoped bean is injected using the @Autowired annotation as follows.

    @Autowired
    private final transient LocaleBean localeBean=null;

    public IntermediateLocaleBean() {}

    public void setLanguage(String language) {
        this.language = language;
    }

    public String localeAction()
    {
        localeBean.setLocale(language.equals("hi")?new Locale(language, "IN"):new Locale(language));
        return FacesContext.getCurrentInstance().getViewRoot().getViewId() + "?faces-redirect=true";
    }
}
@控制器
@范围(“请求”)
公共最终类中间类
{
//执行一些操作来初始化属性语言。
//@ManagedProperty将无法工作,因为此bean由Spring管理。
//它未初始化为中的选定语言。
//它是空的。
私有字符串语言;
//会话范围bean使用@Autowired注释注入,如下所示。
@自动连线
private final transient LocaleBean LocaleBean=null;
公共中间级calebean(){}
公共语言(字符串语言){
这种语言=语言;
}
公共字符串localeAction()
{
setLocale(language.equals(“hi”)?新语言环境(language,“IN”):新语言环境(language));
返回FacesContext.getCurrentInstance().getViewRoot().getViewId()+“?faces redirect=true”;
}
}

如何在此bean中将
语言
属性初始化为
中选定的语言?

传统上,可以使用

FacesContext context = FacesContext.getCurrentInstance();
String language = context.getExternalContext().getRequestParameterMap().get("language");
如下图所示

@Controller
@Scope("request")
public final class IntermediateLocaleBean
{
    @Autowired
    private final transient LocaleBean localeBean=null;

    public IntermediateLocaleBean() {}

    public void setLanguage(String language) {
        this.language = language;
    }

    public String localeAction()
    {
        String language = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("language");
        localeBean.setLocale(language.equals("hi")?new Locale(language, "IN"):new Locale(language));

        return FacesContext.getCurrentInstance().getViewRoot().getViewId() + "?faces-redirect=true";
    }
}
但我个人不喜欢使用
FacesContext
公开整个请求,除非这是绝对必要的


Spring中有一个注释,可以与Spring表达式语言一起使用,以获得如下请求参数

@Controller
@Scope("request")
public final class IntermediateLocaleBean
{
    @Value("#{request.getParameter('language')}") //Exposing the value of language.
    private String language;

    @Autowired
    private final transient LocaleBean localeBean=null;

    public IntermediateLocaleBean() {}

    public void setLanguage(String language) {
        this.language = language;
    }

    public String localeAction()
    {
        localeBean.setLocale(language.equals("hi")?new Locale(language, "IN"):new Locale(language));
        return FacesContext.getCurrentInstance().getViewRoot().getViewId() + "?faces-redirect=true";
    }
}
作为请求参数提供的
language
的值现在可以通过
@value
注释在这个bean中使用(在我的例子中,
language
的getter方法不是必需的)

如果有其他答案,请建议或添加其他答案

@Controller
@Scope("request")
public final class IntermediateLocaleBean
{
    @Autowired
    private final transient LocaleBean localeBean=null;

    public IntermediateLocaleBean() {}

    public void setLanguage(String language) {
        this.language = language;
    }

    public String localeAction()
    {
        String language = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("language");
        localeBean.setLocale(language.equals("hi")?new Locale(language, "IN"):new Locale(language));

        return FacesContext.getCurrentInstance().getViewRoot().getViewId() + "?faces-redirect=true";
    }
}
@Controller
@Scope("request")
public final class IntermediateLocaleBean
{
    @Value("#{request.getParameter('language')}") //Exposing the value of language.
    private String language;

    @Autowired
    private final transient LocaleBean localeBean=null;

    public IntermediateLocaleBean() {}

    public void setLanguage(String language) {
        this.language = language;
    }

    public String localeAction()
    {
        localeBean.setLocale(language.equals("hi")?new Locale(language, "IN"):new Locale(language));
        return FacesContext.getCurrentInstance().getViewRoot().getViewId() + "?faces-redirect=true";
    }
}