gpt4 book ai didi

java - 刷新一些内容,使其在单击删除按钮后消失

转载 作者:行者123 更新时间:2023-12-01 13:42:39 25 4
gpt4 key购买 nike

我正在使用<rich:datatable>显示 List<Map<String, String>> 中的数据(事实上​​,该列表只有一个 Map<String, String> )。 datatable在一行中显示数据,并在该行旁边显示一个编辑和删除按钮。

当我点击delete button时我从 List 中清除寄存器并来自数据库。我想,当我点击delete button时,不显示datatable中的内容并禁用editdelete buttons 。这是数据表代码:

 <rich:dataTable value="#{searchAuthDetailController.finalResults}" 
id="table" var="result">
<c:forEach items="#{searchAuthDetailController.variableNames}" var="vname">
<rich:column>
<f:facet name="header">#{vname}</f:facet>
#{result[vname]}
</rich:column>
</c:forEach>
<rich:column>
<h:commandButton action="EditAuthor" value="Edit"
disabled="#{searchAuthDetailController.editBtDisabled}">
<f:setPropertyActionListener target="#{editAuthController.selectedAuthor}"
value="#{searchAuthDetailController.selectedAuthor}"/>
</h:commandButton>
</rich:column>
<rich:column>
<a4j:commandButton value="Delete" disabled="#{searchAuthDetailController.deleteBtDisabled}"
action="#{searchAuthDetailController.removeSelectedAuthor()}" render="table"/>
</rich:column>
</rich:dataTable>

还有一个List<String>datatable 下面显示一些链接。我希望在单击删除按钮后,这些链接和上面的文本不再出现。

<h:outputText value="#{searchAuthDetailController.linksLabel}" />
<br />
<a4j:repeat value="#{searchAuthDetailController.sameasListToShow}" var="uri" >
<a href="#{uri}">#{uri}</a>
<br />
</a4j:repeat>

我正在使用 2 个名为 deleteBtDisabled 的变量和editBtDisabled作为 disabled property 中的值从按钮。在remove()(下面的代码)中,我将这些变量设置为 true我清除了 List<Map<String, String>> ,变量名ListList显示的链接数量和 linkslabel 。这是remove() :

public void removeSelectedAuthor() {
this.authMapper.remove(bdModel, this.selectedAuthor);
this.variableNames.clear();
this.editBtDisabled = true;
this.deleteBtDisabled = true;
this.sameasListToShow.clear();
this.linksLabel = "";
}

此外,delete button有其render属性设置为 datatable's id。

使用所有这些代码,当我单击删除按钮时,只有数据表中的内容消失,但按钮继续启用,链接列表继续存在。

我该如何解决这个问题?

最佳答案

我不是 Richfaces 用户。但是:

1) JSF 标准 CommandButton 的 Action 方法应该返回结果 Navigation String 或 Null (在您的情况下)。例如: public String removeItem() {...}

2)建议使用List作为数据表的值而不是map,我不知道你的属性是什么类型finalResults

3) 如果您使用 JSF 2.x,那么您可以将参数作为 EL ValueExpression 传递给您的 actionMethods:action="#{searchAuthDetailController.removeSelectedAuthor(item.id)}" ,我建议使用 <f:ajax ....>对于更新,那么您可以仅渲染/更新页面的某些部分

我希望这些有所帮助。

如果您愿意,我可以给您一个工作示例(没有 richfaces )。

更新:示例

Bean:注意:无需在 faces-config 中注册您的 Bean,而是使用注释来执行此操作

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean(name="bbean")
@SessionScoped
public class MyBean {

private boolean dataTableRendered;
private boolean linksRendered;
private List<User> users;
private List<String> links;

public MyBean() {

}

@PostConstruct
public void init(){
try{
users = new ArrayList<User>();
links = new ArrayList<String>();
dataTableRendered = new Boolean(true);
linksRendered = new Boolean(true);
for(int i=0; i<5; i++){
users.add(new User(i,"User: XYZ-"+i));
}

for(int i=0; i<3; i++){
links.add("http://www.abc-"+i+".tld");
}
}catch(Exception e){
e.printStackTrace();
}
}

public final void removeUser(final User selectedUser){
if( selectedUser == null ){
return;
}
for(User u: this.users){
if( u.getId() == selectedUser.getId() ){
users.remove(u);
break;
}
}
this.setLinksRendered(false);
}

public boolean isDataTableRendered() {
return dataTableRendered;
}
public void setDataTableRendered(boolean dataTableRendered) {
this.dataTableRendered = dataTableRendered;
}
public boolean isLinksRendered() {
return linksRendered;
}
public void setLinksRendered(boolean linksRendered) {
this.linksRendered = linksRendered;
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
public List<String> getLinks() {
return links;
}
public void setLinks(List<String> links) {
this.links = links;
}

}

用户对象:

import java.io.Serializable;
public class User implements Serializable{
private static final long serialVersionUID = -8349963947101031989L;
private int id;
private String name;
public User(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

表单xhtml页面:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
>
<h:head>
<meta charset="UTF-8" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>Test</title>
</h:head>
<body>
<f:view>
<h:form id="dataForm">
<h:dataTable id="dataTable" var="user" value="#{bbean.users}"
rendered="#{bbean.dataTableRendered}"
>
<h:column>
<h:outputText value="#{user.name}"></h:outputText>
</h:column>
<h:column>
<h:commandButton value="Remove">
<f:ajax execute="@form" render="@form" listener="#{bbean.removeUser(user)}" />
</h:commandButton>
</h:column>
</h:dataTable>
<h:panelGroup layout="block" id="linksTable" rendered="#{bbean.linksRendered}">
<ui:repeat var="link" value="#{bbean.links}">
<h:outputText value="#{link}, "></h:outputText>
</ui:repeat>
</h:panelGroup>
</h:form>
</f:view>
</body>
</html>

关于java - 刷新一些内容,使其在单击删除按钮后消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20589396/

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