How to pass a parameter along with h:commandButton

前端 未结 1 1672
谎友^
谎友^ 2020-12-05 15:23

One of the most common approaches to change locale in JSF+Seam - with :



        
相关标签:
1条回答
  • 2020-12-05 15:54

    Either pass as method argument (only if your environment supports EL 2.2),

    <h:commandButton value="English" action="#{localeSelector.change('en')}" />
    <h:commandButton value="Deutsch" action="#{localeSelector.change('de')}" />
    <h:commandButton value="Français" action="#{localeSelector.change('fr')}" />
    

    with

    public void change(String language) {
        locale = new Locale(language);
        // ...
    }
    

    Or use <f:setPropertyActionListener>

    <h:commandButton value="English" action="#{localeSelector.change}">
        <f:setPropertyActionListener target="#{localeSelector.language}" value="en" />
    </h:commandButton>
    <h:commandButton value="Deutsch" action="#{localeSelector.change}">
        <f:setPropertyActionListener target="#{localeSelector.language}" value="de" />
    </h:commandButton>
    <h:commandButton value="Français" action="#{localeSelector.change}">
        <f:setPropertyActionListener target="#{localeSelector.language}" value="fr" />
    </h:commandButton>
    

    with

    private String language;
    
    public void change() {
        locale = new Locale(language);
        // ...
    }
    

    Or use <f:param>

    <h:commandButton value="English" action="#{localeSelector.change}">
        <f:param name="language" value="en" />
    </h:commandButton>
    <h:commandButton value="Deutsch" action="#{localeSelector.change}">
        <f:param name="language" value="de" />
    </h:commandButton>
    <h:commandButton value="Français" action="#{localeSelector.change}">
        <f:param name="language" value="fr" />
    </h:commandButton>
    

    with

    public void change() {
        locale = new Locale(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("language"));
        // ...
    }
    

    (you can also let JSF automatically set it by a @ManagedProperty("#{param.language}"), but this requires the bean to be request scoped, or a <f:viewParam>, see also ViewParam vs @ManagedProperty(value = "#{param.id}"))


    Enough ways to pass a parameter from view to controller. Take your pick. The <h:inputHidden> serves in JSF context a somewhat different purpose and it can only be manipulated by JavaScript in the onclick which is ugly.

    0 讨论(0)
提交回复
热议问题