【问题标题】:Java Server Faces - How to update value of displayed List on web page [duplicate]Java Server Faces - 如何更新网页上显示列表的值[重复]
【发布时间】: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>

【问题讨论】:

    标签: jsf primefaces


    【解决方案1】:

    好吧,我认为您的大小始终为 1,因为在您的 addRequestParameter 方法中,您只添加了一个元素。下次单击此按钮创建新请求并创建新的空列表。您必须将旧对象存储在某个地方(例如数据库)。

    【讨论】:

    • 嗯,我想做的是获取列表的当前大小,然后添加另一个对象,它会在添加新的文本框时更新 UI。
    • 是的,但是当您单击按钮时,您每次都会创建新的空列表。如果您使用 EJB,则始终可以使用会话 bean。它们必须在新请求之间存储。
    • 哦,你得到了我需要的东西我使用了注释@SessionScoped 然后它工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-21
    • 1970-01-01
    • 2011-11-19
    • 2012-12-10
    • 2017-12-23
    • 2021-11-17
    • 2017-12-18
    相关资源
    最近更新 更多