Java Server Faces - 如何更新网页上显示列表的值[重复]
Posted
技术标签:
【中文标题】Java Server Faces - 如何更新网页上显示列表的值[重复]【英文标题】:Java Server Faces - How to update value of displayed List on web page [duplicate] 【发布时间】:2015-11-04 15:28:06 【问题描述】:我正在为请求名称和值做动态文本框,但是当我单击 .xhtml 文件上的添加按钮时,它的大小始终为 1。我想获取列表的当前大小,然后添加另一个空白对象。
HomepageBean.java
@ManagedBean
public class HomepageBean
private String url;
private String portNumber;
private List<RequestParameter> requestParameterList = new ArrayList<>();
public List<RequestParameter> getRequestParameterList()
return requestParameterList;
public void setRequestParameterList(List<RequestParameter> requestParameterList)
this.requestParameterList = requestParameterList;
/**
* @return the url
*/
public String getUrl()
return url;
/**
* @param url the url to set
*/
public void setUrl(String url)
this.url = url;
/**
* @return the portNumber
*/
public String getPortNumber()
return portNumber;
/**
* @param portNumber the portNumber to set
*/
public void setPortNumber(String portNumber)
this.portNumber = portNumber;
public void addRequestParameter(List<RequestParameter> requestParameters)
System.out.println("size: " + requestParameterList.size());
RequestParameter requestParameter = new RequestParameter();
requestParameters.add(requestParameter);
System.out.println("size: " + requestParameterList.size());
this.setRequestParameterList(requestParameters);
public void removeRequestParameter(RequestParameter requestParameter)
requestParameterList.remove(requestParameter);
这是我的 .xhtml 文件,它从 bean 中迭代 List 的值
index.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">>
<h:head>
<h:outputStylesheet library="css" name="/WEB-INF/homepageStyle.css"/>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form>
<h:outputLabel style="font-weight: bold" value="Platform V2 Emulator"/>
<br />
<h:panelGrid styleClass="panelGridCenter" columns="4" cellpadding="5">
<h:outputLabel for="url" value="Url:" style="font-weight:bold" />
<p:inputText id="url" value="#homepageBean.url" />
<p:commandButton value="Submit" update="urlString" icon="ui-icon-check" />
<h:outputText id="urlString" value="#homepageBean.url" />
</h:panelGrid>
<h:panelGrid styleClass="panelGridCenter" columns="4" cellpadding="5">
<h:outputLabel for="portNumber" style="font-weight: bold" value="Port:"/>
<p:inputText id="portNumber" value="#homepageBean.portNumber"/>
<p:commandButton value="Submit" update="portNumberString" icon="ui-icon-check" />
<h:outputText id="portNumberString" value="#homepageBean.portNumber" />
</h:panelGrid>
<h:panelGrid columns="6" cellpadding="5">
<h:outputLabel for="parameters" style="font-weight: bold" value="Request Parameters:"/>
</h:panelGrid>
<h:panelGrid id="parametersGrid" columns="3" cellpadding="5">
<c:forEach items="#homepageBean.requestParameterList" var="parameter">
<h:inputText value="#parameter.key"/>
<h:inputText value="#parameter.value"/>
<h:commandButton action="#homepageBean.removeRequestParameter(parameter)" value="Remove"/>
</c:forEach>
</h:panelGrid>
<h:panelGrid columns="1" cellpadding="5">
<p:commandButton actionListener="#homepageBean.addRequestParameter(homepageBean.requestParameterList)" update="parametersGrid" value="Add"/>
</h:panelGrid>
<h:link outcome="welcomePrimefaces" value="Primefaces welcome page" />
</h:form>
</h:body>
【问题讨论】:
【参考方案1】:好吧,我认为您的大小始终为 1,因为在您的 addRequestParameter
方法中,您只添加了一个元素。下次单击此按钮创建新请求并创建新的空列表。您必须将旧对象存储在某个地方(例如数据库)。
【讨论】:
嗯,我想做的是获取列表的当前大小,然后添加另一个对象,它会在添加新的文本框时更新 UI。 是的,但是当您单击按钮时,您每次都会创建新的空列表。如果您使用 EJB,则始终可以使用会话 bean。它们必须在新请求之间存储。 哦,你得到了我需要的东西我使用了注释@SessionScoped
然后它工作了。以上是关于Java Server Faces - 如何更新网页上显示列表的值[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Java Server Faces:仅在业务逻辑层中进行验证
javax.faces.FacesException: java.lang.ClassCastException: java.lang.String 不能转换为 javax.faces.compone
java.lang.NoClassDefFoundError: javax/faces/model/SelectItem
java.lang.IllegalStateException:找不到工厂 javax.faces.context.FacesContextFactory 的备份
java.lang.IllegalStateException:找不到工厂 javax.faces.application.ApplicationFactory 的备份
查看范围:java.io.NotSerializableException: javax.faces.component.html.HtmlInputText