передача выбранного объекта из списка объектов, каждый из которых имеет свою кнопку - PullRequest
0 голосов
/ 20 мая 2018

Я работаю над веб-приложением, которое отображает список объектов, каждый объект имеет свой модальный режим, при нажатии внутри модального окна есть два раскрывающихся меню и кнопка, которая должна вызывать метод add в бине, чтобывыполнить действие и добавить выбранный объект, принимая три значения, выделенный объект, выбранные два элемента из двух раскрывающихся списков и значение счетчика.

<ui:repeat value="#{ViewTeacher.teacherList}" var="teacher"
varStatus="status">


<h:panelGroup layout="block" styleClass="name">
<p>#{teacher.name}</p>

</h:panelGroup>
<br />
<br />
<a onclick="viewModal(#{status.index})" class="btn btn-success">view</a>

<h:panelGroup id="modal" layout="block" class="modal"
style="max-width: 44em;" tabindex="1">
<h:panelGroup class="modal-content" layout="block">
<span class="close" onclick="modClose()">&times;</span>

<h:outputText styleClass="description" value="#{teacher.name}" />
<br />
<br />

<br />
students


<h:selectOneMenu value="ok" class="form-control">

<f:selectItems value="#{teacher.students}" var="s"
itemValue="#{s.id}" itemLabel="#{s.name}" />



</h:selectOneMenu>


classes

<h:selectOneMenu value="ok" class="form-control">
<f:selectItems value="#{teacher.classes}" var="c"
itemValue="#{c.id}" itemLabel="#{c.name}" />
</h:selectOneMenu>
<br />

<h:panelGroup layout="block" styleClass="form-group">


<p:spinner min="1" max="10" />

</h:panelGroup>

<h:commandButton id="submitButton" styleClass="btn btn-success" value="ADD">
<!—-this is the button that is supposed to take the values



</h:commandButton>

<a onclick="modClose()" class="btn btn-success">CANCEL</a>

</h:panelGroup>


</h:panelGroup>


</ui:repeat>

Я пытался:

<f:param name="name1" value="China" />

Но тот факт, что имя параметра будет повторяться, будет делать его все время одинаковым и может быть установлено для самого последнего найденного объекта,

Любая рекомендация?

ОБНОВЛЕНИЕ:

<p:commandLink styleClass="btn btn-success" process="@this"
    onclick="viewModal(#{status.index});">
    <h:outputText value="ADD" />
                                <f:setPropertyActionListener
        value="#{teacher.id}" target="#{ViewTeacher.selectedTeacher}" /> 

        </p:commandLink>

Внесено это изменение, чтобы передать идентификатор учителя, но в бине он все еще равен нулю

1 Ответ

0 голосов
/ 21 мая 2018

Прежде всего, иметь отдельный мод для каждого объекта не очень хорошая идея.Вы можете достичь (что вы пытаетесь):

1).Добавление свойства (с его геттером и сеттером) в bean для выбранного объекта.

2).Поместите один модальный (<p:dialog с id="modal" и widgetVar="modal" атрибутами) снаружи ui:repeat для отображения данных из выбранного объекта.

3).Установите выбранный объект по нажатию на ссылку просмотра, обновления и отображения модального состояния, используя:

<p:commandLink styleClass="btn btn-success" process="@this" update="modal"
    onclick="PF('modal').show();">
    <h:outputText value="View" />
    <f:setPropertyActionListener
        value="#{teacher}" target="#{ViewTeacher.selectedTeacher}" />
</p:commandLink>

Здесь f:setPropertyActionListener будет устанавливать выбранный вами модальный компонент в бобе и, таким образом, он станет доступен в вашем слушателе действий.

Обновление: измените код следующим образом:

<ui:repeat value="#{ViewTeacher.teacherList}" var="teacher" varStatus="status">
    <h:panelGroup layout="block" styleClass="name">
        <p>#{teacher.name}</p>
    </h:panelGroup>

    <p:commandLink styleClass="btn btn-success" process="@this" update="modal"
        oncomplete="PF('modal').show();">
        <h:outputText value="view" />
        <f:setPropertyActionListener
            value="#{teacher}" target="#{ViewTeacher.selectedTeacher}" />
    </p:commandLink>
</ui:repeat>

<p:dialog id="modal" widgetVar="modal" header="Edit Teacher" modal="true"
    showEffect="fade" hideEffect="fade" resizable="false" closeOnEscape="true"
    styleClass="teachers-dialog">

    <h:outputText styleClass="description" value="#{ViewTeacher.selectedTeacher.name}" />
    <br />
    <br />
    <br />

    students
    <h:selectOneMenu value="#{ViewTeacher.selectedStudentId}" class="form-control">
        <f:selectItems value="#{ViewTeacher.selectedTeacher.students}"
            var="s" itemValue="#{s.id}" itemLabel="#{s.name}" />
    </h:selectOneMenu>

    classes
    <h:selectOneMenu value="#{ViewTeacher.selectedClassId}" class="form-control">
        <f:selectItems value="#{ViewTeacher.selectedTeacher.classes}"
            var="c" itemValue="#{c.id}" itemLabel="#{c.name}" />
    </h:selectOneMenu>
    <br />

    <h:panelGroup layout="block" styleClass="form-group">
        <p:spinner value="#{ViewTeacher.spinnerValue}" min="1" max="10" />
    </h:panelGroup>

    <h:commandButton id="submitButton" styleClass="btn btn-success" value="ADD">
    </h:commandButton>
</p:dialog>

Где selectedTeacher, selectedStudentId, selectedClassId, spinnerValue - свойства из вашего ViewTeacherбоб.

...