gpt4 book ai didi

java - 从 primefaces 数据表中选择项目不起作用

转载 作者:行者123 更新时间:2023-12-02 00:10:09 26 4
gpt4 key购买 nike

我正在使用 primefaces 数据表来显示数据列表。我希望我的用户能够选择多行,然后对所选行表示的数据执行操作。一切正常,直到执行操作,我发现无法解析选择。

下面是我的xhtml页面

<h:form enctype="multipart/form-data" id="upload">
<primefaces-p:panel closable="false" collapsed="false" header="Excel Contact Uploader" id="pnlupload" rendered="true" toggleable="false" visible="true" widgetVar="pnlupload">

<primefaces-p:growl id="msg" showDetail="true" life="3000" showSummary="true">

</primefaces-p:growl>
<primefaces-p:fileUpload auto="true"
allowTypes="/(\.|\/)(xls)$/"
sizeLimit="1024000"
mode="advanced"
multiple="true" invalidFileMessage="Invalid file type" invalidSizeMessage="File too large" dragDropSupport="true" fileUploadListener="#{excelFileController.handleFileUpload}" showButtons="true" update="msg, tblcontacts
" required="false"/>


<br />
<br />


<primefaces-p:scrollPanel rendered="true" style="height:200px;">
<primefaces-p:dataTable emptyMessage="No Contacts Uploaded" id="tblcontacts" rendered="true" rows="8"
value="#{excelFileController.contacts}" var="contact" style="width:50pc;">
<primefaces-p:column style="width:18px" headerText="Select">
<h:selectBooleanCheckbox value="#{contact.selected}" />

</primefaces-p:column>

<primefaces-p:column headerText="File Name">
#{contact.groupName}
</primefaces-p:column>
<primefaces-p:column headerText="Number of Contacts">
#{contact.numberofentries}
</primefaces-p:column>
<primefaces-p:column>
<h:button outcome="blkedit?faces-redirect=true" rendered="true" value="Edit">
<f:param name="contact" value="#{contact.contactId}"/>
</h:button>
</primefaces-p:column>
</primefaces-p:dataTable>
</primefaces-p:scrollPanel>

<br />
</primefaces-p:panel>
<h:commandButton value="Delete" id="btndelete" action="#{excelFileController.removeContact}" immediate="true" disabled="false" rendered="true"/>
<h:message for="btndelete" />
</h:form>

下面是我的支持 bean

@Named
@ViewAccessScoped
public class ExcelFileController implements Serializable, IFileController {

/**
*
*/
private static final long serialVersionUID = -8117258104485487921L;

@Inject
PhoneNumberFormatter formatter;

@Inject
@Authenticated
UserProfile profile;

public PhoneNumberFormatter getFormatter() {
return formatter;
}

public void setFormatter(PhoneNumberFormatter formatter) {
this.formatter = formatter;
}

@EJB
BulkContactDeleter deleter;

@Inject
Logger logger;

@Inject
@CurrentContext
FacesContext context;

@Inject
BulkSMSContactListProducer listProducer;

@Inject
ConfigurationListProducer producer;

private BulkSMSContacts[] contactsSelected;

private List<BulkSMSContacts> contacts;

public BulkSMSContacts[] getContactsSelected() {
return contactsSelected;
}

public void setContactsSelected(BulkSMSContacts[] contactsSelected) {
this.contactsSelected = contactsSelected;
}

/*
* public BulkContactDataModel getContactDataModel() { return
* contactDataModel; }
*/

@PostConstruct
public void init() {
logger.log(Level.INFO, "Entering excel file controller");
/*
* contactDataModel = new BulkContactDataModel(
* listProducer.getBulkSMSContacts());
*/
this.contacts = listProducer.getBulkSMSContacts();

}

@Override
public String removeContact() {
int contactsdeleted = 0;

if (this.contacts != null) {
/*
* for (BulkSMSContacts contacts : contactsSelected) { if (contacts
* != null) { deleter.deleteContact(contacts); contactsdeleted += 1;
* }
*/
for (BulkSMSContacts c : contacts) {
if (c.isSelected()) {

deleter.deleteContact(c);
contactsdeleted += 1;
}

}
contacts = listProducer.getBulkSMSContacts();

logger.log(Level.INFO, "Deleted " + contactsdeleted + " Contacts");
context.addMessage(null, new FacesMessage(
FacesMessage.SEVERITY_INFO, "Success", contactsdeleted
+ " entries where deleted successfully"));
} else {
context.addMessage(null, new FacesMessage(
FacesMessage.SEVERITY_ERROR, "Error",
"No contact file was selected!"));
}
return null;
}

public List<BulkSMSContacts> getContacts() {
return contacts;
}

public void setContacts(List<BulkSMSContacts> contacts) {
this.contacts = contacts;
}

}

下面是我的模型定义

@Entity
public class BulkSMSContacts implements Serializable {

private static final long serialVersionUID = -6444763251149211384L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@XmlAttribute
private long contactId;

@XmlElement
@NotNull(message = "message.validator.notnull")
@Size(min = 9, max = Integer.MAX_VALUE, message = "message.validator.size")
@Column(nullable = false, length = Integer.MAX_VALUE, unique = false)
@Basic(fetch = FetchType.EAGER)
private String contacts;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "Id", nullable = false)
@XmlElement(type = SMSAccount.class)
private SMSAccount account;

@NotNull(message = "message.validator.notnull")
@Size(min = 2, max = 100, message = "message.validator.size")
@Column(length = 100, nullable = false, unique = false)
@XmlElement
private String groupName;

@Column(nullable = true)
private int numberofentries = 0;

@javax.persistence.Transient
private boolean selected;

//getters and setters

问题在于,当单击删除按钮时(尽管是在调用removeContact() 方法时。所有行的计算结果均为未选择任何行。

我也尝试过使用 primefaces 展示方法,但仍然是示例问题。

请问我做错了什么吗?

最佳答案

我不明白为什么要在实体类中设置选择属性。尝试这样做

  1. 设置数据模型:

    public class BulkSMSContactsDataModel extends ListDataModel<BulkSMSContacts> implements SelectableDataModel<BulkSMSContacts> {    

    public BulkSMSContactsDataModel() {
    }

    public BulkSMSContactsDataModel(List<BulkSMSContacts> data) {
    super(data);
    }

    @Override
    public BulkSMSContacts getRowData(String rowKey) {
    List<BulkSMSContacts> contacts = (List<BulkSMSContacts>) new yourDao.getListOfBulkSMSContacts(); //yourDAO :BulkSMSContactsSelector i guess
    for(BulkSMSContacts c : contacts) {
    if(String.valueOf(c.getContactId()).equals(rowKey))
    return c;
    }

    return null;
    }

    @Override
    public Object getRowKey(BulkSMSContacts obj) {
    return String.valueOf(obj.getContactId());
    }

    }

  2. 配置你的bean:

    public class ExcelFileController implements Serializable, IFileController {
    private BulkSMSContacts[] contactsSelected;
    private List<BulkSMSContacts> contacts;
    private BulkSMSContacts[] selectedcontacts;
    private BulkSMSContactsDataModel contactsList;
    public ExcelFileController() {
    contactsList = new BulkSMSContactsDataModel(contacts);
    }
    // getters and setters
    // the rest of your code

    }

  3. 配置您的 xhtml

    <p:dataTable  emptyMessage="No Contacts Uploaded" id="tblcontacts" rendered="true"  rows="8" value="#{excelFileController.contactsList}" var="contact" style="width:50pc;" selection="#{excelFileController.selectedcontacts}">
    <p:column selectionMode="multiple" style="width:20px" />
    <p:column headerText="File Name">
    #{contact.groupName}
    </p:column>
    <p:column headerText="Number of Contacts">
    #{contact.numberofentries}
    </p:column>
    <!-- the rest -->

  4. 更新您的用户界面。

  5. 使用p而不是primefaces-p,这样可以更轻松地阅读您的代码。 :)

关于java - 从 primefaces 数据表中选择项目不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13022900/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com