我有一个PickList,我想从组件中获取所选项目并保留在DB中。但我不知道如何在我的支持bean类中获取所选值。下面是我的代码。有没有任何方法可以从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>
@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;
}
}
提前致谢。
答案 0 :(得分:0)
@value是正确的属性,但是如果每次调用getter时都覆盖newRoles
(不将业务逻辑放入getter / setter),我不确定你的例子如何工作。您不需要访问UIPickList的实例,所选的值将保存到newRoles
,您可以直接从bean获取它。
答案 1 :(得分:0)
我做了一些改动,结果就是这样:
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 Bean:
@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);
}
}
}
结果: