RF-4.5.x Как получить выбранные элементы списка выбора в компоненте поддержки

У меня есть список выбора, и я хочу взять выбранные элементы из компонента и сохранить их в БД. Но я не уверен, как получить выбранные значения в моем классе вспомогательных компонентов. ниже мой код. Есть ли способ получить целевые значения из PickList.

<rich:pickList id="userListShuttle"
       binding="#{sampleBean.pickLst}"
       var="roles"
       value="#{sampleBean.newRoles}"
       sourceCaption="Available Roles"
       targetCaption="Assigned Roles"
       listWidth="440px" listHeight="145px"
       orderControlsVisible="false"
       fastOrderControlsVisible="false">
       <f:selectItems value="#{sampleBean.availableRoles}"/>
</rich:pickList>

Java-код:

@Component( "sampleBean" )
@Scope( "request" )
public class SampleBean {

    private List<String> newRoles;   
    private List<String> availableRoles;   
    private UIPickList pickLst = new UIPickList();

     /**
     * @return the newRoles
     */
    public List<String> getNewRoles() {
        newRoles = new ArrayList<String>();       
        newRoles.add( "Role 3" );
        newRoles.add( "Role 4" );
        newRoles.add( "Role 5" );
        newRoles.add( "Role 6" );
        Collections.sort( newRoles );
        return newRoles;
    }

    /**
     * @param newRoles the newRoles to set
     */
    public void setNewRoles( List<String> newRoles ) {
        this.newRoles = newRoles;
    }

    /**
     * @return the availableRoles
     */
    public List<String> getAvailableRoles() {
        availableRoles = new ArrayList<String>();
        availableRoles.add( "Role 1" );
        availableRoles.add( "Role 2" );
        availableRoles.add( "Role 3" );
        availableRoles.add( "Role 4" );
        availableRoles.add( "Role 5" );
        availableRoles.add( "Role 6" );
        Collections.sort( availableRoles );
        return availableRoles;
    }

    /**
     * @param availableRoles the availableRoles to set
     */
    public void setAvailableRoles( List<String> availableRoles ) {
        this.availableRoles = availableRoles;
    }

    /**
     * @return the roleShuttle
     */
    public UIPickList getPickLst() {
        return roleShuttle;
    }

    /**
     * @param roleShuttle the roleShuttle to set
     */
    public void setPickLst( UIPickList pickLst) {
        this.pickLst= pickLst;
    }
}

Заранее спасибо.


person user958340    schedule 15.10.2015    source источник


Ответы (2)


Я внес небольшие изменения, и вот результат:

Код JSF:

   <h:form>
            <h:panelGrid>
                <rich:panel >
                <rich:pickList id="userListShuttle"
                        switchByClick="true"
                        value="#{testClass.newRoles}"
                        sourceCaption="Available Roles"
                        targetCaption="Assigned Roles"
                        listWidth="440px" listHeight="145px"                      
                        valueChangeListener="#{testClass.onSelectListItem}">
                    <f:ajax event="click" render=" " />  
                    <f:selectItems value="#{testClass.availableRoles}" var="label"/>
                 </rich:pickList>
                </rich:panel >
            </h:panelGrid>

        </h:form>

Компонент Java:

@ManagedBean
@ViewScoped
public class TestClass {
     private List<String> newRoles;   
    private List<String> availableRoles;   

    public List<String> getNewRoles() {
        newRoles = new ArrayList<String>();       
        newRoles.add( "Role 3" );
        newRoles.add( "Role 4" );
        newRoles.add( "Role 5" );
        newRoles.add( "Role 6" );
        Collections.sort( newRoles );
        return newRoles;
    }

    /**
     * @param newRoles the newRoles to set
     */
    public void setNewRoles( List<String> newRoles ) {
        this.newRoles = newRoles;
    }

    /**
     * @return the availableRoles
     */
    public List<String> getAvailableRoles() {
        availableRoles = new ArrayList<String>();
        availableRoles.add( "Role 1" );
        availableRoles.add( "Role 2" );
        availableRoles.add( "Role 3" );
        availableRoles.add( "Role 4" );
        availableRoles.add( "Role 5" );
        availableRoles.add( "Role 6" );
        availableRoles.add( "Role 7" );
        availableRoles.add( "Role 8" );
        Collections.sort( availableRoles );
        return availableRoles;
    }


    public void setAvailableRoles( List<String> availableRoles ) {
        this.availableRoles = availableRoles;
    }

    public void onSelectListItem(ValueChangeEvent event){
        System.err.println("___________________");
       List <String> items = (List<String>)event.getNewValue();
       for (String item : items){
           System.err.println("Rol:" + item);
       }
    }
}

Результат:

выходное изображение

person WilsonGmn    schedule 29.10.2015

@value - правильный атрибут, хотя я не уверен, как вы ожидаете, что ваш пример будет работать, если вы перезаписываете newRoles каждый раз, когда вызывается геттер (не помещайте бизнес-логику в геттеры/сеттеры). Вам не нужно обращаться к экземпляру UIPickList, выбранные значения будут сохранены в newRoles, вы получите их непосредственно из bean-компонента.

person Makhiel    schedule 19.10.2015
comment
Спасибо за ответ. Это работает. Итак, я переместил всю логику в свой конструктор и могу получить измененные значения из «newRoles» в моем вспомогательном компоненте.. еще раз спасибо за ваш ответ.. - person user958340; 21.10.2015