Jsf PicklistPrimeFaces-如何从目标列表获取数据?
我通过PrimeFaces创建了一个选择列表。现在,我想在单击commandButton时处理目标列表中列出的选定项 我想通过控制器传递数据并将其存储在我的数据库中。但是每次我调用duallist.getTarget()函数时,它都是空的 我已经创建了一个foreach循环,我想在其中选择目标列表中的所有项目: 控制器(Bean):Jsf PicklistPrimeFaces-如何从目标列表获取数据?,jsf,primefaces,Jsf,Primefaces,我通过PrimeFaces创建了一个选择列表。现在,我想在单击commandButton时处理目标列表中列出的选定项 我想通过控制器传递数据并将其存储在我的数据库中。但是每次我调用duallist.getTarget()函数时,它都是空的 我已经创建了一个foreach循环,我想在其中选择目标列表中的所有项目: 控制器(Bean): private List<DTOAktivitaet> source = new ArrayList<DTOAktivitaet>(); p
private List<DTOAktivitaet> source = new ArrayList<DTOAktivitaet>();
private List<DTOAktivitaet> target = new ArrayList<DTOAktivitaet>();
private List<DTOAktivitaet> zwischen = new ArrayList<DTOAktivitaet>();
public void speicherAktiZug() {
DTOAktivitaet aktivitaet_vorgaenger = null;
for (DTOAktivitaet item : controller.getAktivitaeten()) {
if (item.toString().equals(selected)) {
aktivitaet_vorgaenger = item;
}
}
for (DTOAktivitaet aktivitaet : zwischen) {
try {
dao.aktiZugAkt(aktivitaet_vorgaenger, aktivitaet);
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
public AktiListController() {
for (DTOAktivitaet ak : controller.getAktivitaeten()) {
source.add(ak);
}
aktis = new DualListModel<DTOAktivitaet>(source, target);
zwischen = aktis.getTarget();
}
<h:form id="form" name="formular">
<h:outputText id="aktivitaet"
value="#{aktiListController.selected}" />
<p:pickList id="pickList" value="#{aktiListController.aktis}"
var="aktivitaet" itemValue="#{aktivitaet}"
itemLabel="#{aktivitaet}" converter="aktivitaetsConverter"
showSourceControls="true" showTargetControls="true" />
<h:commandButton
action="#{aktiListController.speicherAktiZug}"
value="Aktivität-Abhängigkeit anlegen" class="commandButton">
</h:commandButton>
</h:form>
@EJB
public class AktiListConverter implements Converter {
private InitialisierungController controller = InitialisierungController
.getInstance();
DTOAktivitaet aktivitaet = new DTOAktivitaet();
String name = "";
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
for (DTOAktivitaet item : controller.getAktivitaeten()) {
if (item.toString().equalsIgnoreCase(arg2)) {
this.aktivitaet = item;
System.out.println(aktivitaet);
return aktivitaet;
}
}
return null;
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
this.aktivitaet = (DTOAktivitaet) arg2;
return this.name = aktivitaet.getTeambezeichnung();
}
}
我的问题:在我想将项目存储到数据库之前,目标列表是空的。我不完全理解您的代码,因为它不是用英语编写的,但据我所知,您的转换器写得很糟糕。就我所知,你基本上是做了一个
toString()
和一个fromString()
。这是非常容易出错的,而且您的操作方式在性能上非常重要。最好使用唯一ID(业务或数据库)
例如:
@FacesConverter(value = "aktiListConverter")
public class AktiListConverter implements Converter
{
private InitialisierungController controller = InitialisierungController.getInstance();
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2)
{
//Get object by it's unique ID
return controller.getById(Long.parseLong(arg2));
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2)
{
//Return object's unique ID
return ((DTOAktivitaet) arg2).getId();
}
}
不要将对象用作itemLabel(执行toString()
),而是使用为个人生成类似getName()
的漂亮标签的东西
itemLabel="#{aktivitaet.nameOrSomething}"
speicherAktiZug()
方法对我来说没有意义,所以我走了这么远:
public class AktiListController
{
private List<DTOAktivitaet> source;
private List<DTOAktivitaet> target = new ArrayList<DTOAktivitaet>();
private DualListModel<DTOAktivitaet> aktis;
public AktiListController()
{
source = controller.getAktivitaeten();
aktis = new DualListModel<DTOAktivitaet>(source, target);
}
//Getters and setters
public void speicherAktiZug()
{
target = aktis.getTarget();
//target should contain the picked items here.
}
}
公共类AktiListController
{
私人名单来源;
私有列表目标=新的ArrayList();
私有双列表模型aktis;
公共AktiListController()
{
source=controller.getaktiviteen();
aktis=新的DualListModel(来源、目标);
}
//接球手和接球手
公共无效speicherAktiZug()
{
target=aktis.getTarget();
//目标应包含此处拾取的项目。
}
}
我看到您也在使用aktiListController。选中了,但我看不出它的用途。在(XHTML)和(类转换器)之间的Conterter名称不相等。
converter=“aktivitaetsConverter”
公共类AktiListConverter实现转换器{…}请发布JSF页面的相关部分+支持bean的相关部分。您发布的代码没有帮助。谢谢您的回答!这大大改进了我的代码。为了解决这个问题:我从控制器构造函数中的picklist访问了目标列表。所以逻辑上它是空的。我在构造函数外创建了一个函数,并将项带到那里。