Java 单击“删除”按钮后刷新某些内容以使其消失
我使用Java 单击“删除”按钮后刷新某些内容以使其消失,java,jsf,refresh,ajax4jsf,Java,Jsf,Refresh,Ajax4jsf,我使用来显示列表中的数据(事实上,该列表只有一个映射)。datatable在一行中显示数据,并在该行旁边显示编辑和删除按钮 当我点击删除按钮时,我从列表和数据库中清除寄存器。我希望,当我单击删除按钮时,不要显示数据表中的内容,并禁用编辑和删除按钮。以下是数据表代码: <rich:dataTable value="#{searchAuthDetailController.finalResults}" id="table" var="result">
来显示列表中的数据(事实上,该列表只有一个映射)。datatable
在一行中显示数据,并在该行旁边显示编辑和删除按钮
当我点击删除按钮时,我从列表和数据库中清除寄存器。我希望,当我单击删除按钮时,不要显示数据表中的内容
,并禁用编辑
和删除
按钮
。以下是数据表代码:
<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>
我正在使用名为deleteBtDisabled
和editBtDisabled
的两个变量作为按钮中disabled属性的值。在remove()(下面的代码)处,我将这些变量设置为true
,并清除列表
、变量名称列表
、显示的链接的列表和链接标签
。
下面是remove()
:
另外,delete按钮
将其render
属性设置为datatable的
id
对于所有这些代码,当我单击delete按钮时,只有datatable中的内容消失,但是按钮继续启用,链接列表继续存在
如何解决这个问题?我不是Richfaces用户。但是:
1) JSF标准CommandButton的操作方法应该返回结果导航字符串或Null(在您的示例中)。示例:公共字符串removeItem(){…}
2) 建议使用列表作为数据表的值,而不是映射,我不知道您的属性是什么类型的finalResults
3) 如果您使用JSF 2.x,那么您可以将参数作为EL ValueExpression传递给actionMethods:action=“#{searchAuthDetailController.removeSelectedAuthor(item.id)}”
,我建议使用
进行更新,然后您可以只呈现/更新页面的某些部分
我希望这些帮助
如果你愿意,我可以给你一个工作的例子(没有richfaces)
更新:示例
Bean:注意:无需在faces配置中注册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;
}
}
表单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>
试验
谢谢!你能给我一个例子和一个数据表(不需要是一个)。我不知道怎么用我更新了答案。我在Tomcat7.x上使用JSF2.2和Mojarra2.2对其进行了测试谢谢你的例子!!这正是我使用的配置。看看f:ajax的执行和渲染属性。我是否使用标签的名称?-您使用@form是因为h:form标记吗?不,不是标记的名称,而是从API Docs:Evaluates到Collection。将参与请求处理生命周期“执行”部分的组件的标识符。如果指定了文字,则标识符必须用空格分隔。任何关键字“@this”、“@form”、“@all”、“@none”都可以在标识符中指定。欢迎光临,很高兴能为您提供帮助
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;
}
}
<!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>