Ниже приводится мой requirement- Пользовательские область видимости ManagedBean в JSF2.0 с PrimeFaces 3,5
Здесь у меня есть p:panelGrid
, который может добавить & удалить строку таблицы. В сетке содержится p:inputText
и различные другие компоненты PrimeFaces вместе с компонентом p:fileUpload
в каждой строке. Компонент p:fileUpload
установлен с атрибутами mode="advanced" auto="true"
, который автоматически загружает файл и скрывается после завершения успешной загрузки.
Все p:panelGrid
находится в @ViewScoped
, отсюда работаю хорошо. Я сохранил p:fileUpload
компонент в @RequestScoped
, так как для каждого запроса на загрузку он должен загрузить файл, но после добавления новой строки предыдущее состояние больше не сохраняется. поэтому p:fileUpload
начинает видимо и в предыдущих строках. Этого я не хочу. Нужно ли мне писать какие-либо настраиваемые области? Ниже представлен вид - |
<h:form>
<p:panel id="agentForm" header="#{msg.AGENTS_INFORMATION}"
style="overflow:auto; margin-bottom: 2px">
<div align="center" style="margin-top: 20px; margin-bottom: 2px">
<ui:repeat value="#{agent.scenarioList}" var="c">
<p:panelGrid>
<p:row>
<p:column>
<p:inputText id="ipaddress" value="#{c.machineIpAddress}"
style="width:90%">
<p:watermark for="ipaddress" value="#{msg.MACHINE_IP_ADDRESS}" />
</p:inputText>
</p:column>
<p:column>
<p:inputText id="username" value="#{c.machineUsername}"
style="width:90%">
<p:watermark for="username" value="#{msg.MACHINE_USERNAME}" />
</p:inputText>
</p:column>
<p:column>
<p:password id="passwd" value="#{c.machinePassword}">
<p:watermark for="passwd" value="#{msg.MACHINE_PASSWORD}" />
</p:password>
</p:column>
<p:column id="fileUpload">
<p:fileUpload rendered="#{!fileUploadController.hidden}"
label="Upload Script" style="font-size: 100% !important;"
showButtons="false"
fileUploadListener="#{fileUploadController.upload}"
mode="advanced" auto="true" sizeLimit="100000"
allowTypes="/(\.|\/)(py|txt)$/"
update="fileUpload, outPanel, :message" />
<p:outputPanel id="outPanel">
<!-- Below outputLabel will be linked to uploaded file, so that User can see the file -->
<p:outputLabel style="cursor: pointer" value="View uploded Script"
label="View Script" rendered="#{fileUploadController.hidden}" />
</p:outputPanel>
</p:column>
<p:column>
<p:inputText id="testname" value="#{c.testName}"
style="width:90%">
<p:watermark for="testname" value="#{msg.TEST_NAME}" />
</p:inputText>
</p:column>
<p:column>
<p:spinner id="threads" value="#{c.threads}" min="1" max="500"
size="8">
<p:tooltip for="threads" value="#{msg.TEST_NAME}"
showEffect="slide" hideEffect="slide" />
</p:spinner>
</p:column>
<p:column>
<p:selectBooleanCheckbox id="chkSelected" value="#{c.selected}">
<p:tooltip for="chkSelected" value="#{msg.CHECKBOX}"
showEffect="slide" hideEffect="slide" />
</p:selectBooleanCheckbox>
</p:column>
</p:row>
</p:panelGrid>
</ui:repeat>
<p:toolbar style="margin-top: 10px;">
<p:toolbarGroup align="right">
<p:commandButton value="#{msg.ADD_IT}"
update=":message, agentForm"
actionListener="#{agent.addComponent()}" />
<p:commandButton value="#{msg.DELETE_IT}"
update=":message, agentForm"
actionListener="#{agent.deleteComponent()}" />
</p:toolbarGroup>
</p:toolbar>
</div>
</p:panel>
</h:form>
Мой управляемый компонент, который находится в @ViewScoped
выглядеть this-
Объект Сценарий содержит всю информацию о строке. Ниже код-
package org.ravij.performance.model;
import java.io.Serializable;
public class Scenario implements Serializable {
private String machineIpAddress;
private String machineUsername;
private String machinePassword;
private String uploadedFilePath;
private String testName;
private int threads = 1;
private boolean selected = false;
//Below are the getters and setter w.r.t all the above variables
//I am not putting it, to make the code short
}
Управляемый боб FileUploadController
в @RequestScoped
Спасибо ... Не могли бы вы подробнее рассказать о скрытых полях в '@ ViewScoped' bean. Мой bean 'содержит' список объекта 'user'. Это традиционно и достаточно просто. Можете ли вы предоставить модифицированный код на основе моего представления? –
Несомненно, добавьте код 'addComponent()' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' из '' 'вашего агента в ваш вопрос, и я обновлю свой ответ на рабочий пример. –
Обновлен вопрос с помощью требуемого кода. Пожалуйста, изучите его. –