Как передать параметр для получения значений для f:SelectItem внутри p:selectOneMenu

#jsf #primefaces #selectonemenu

Вопрос:

Я хочу передать параметр, чтобы получить значения для f:SelectItem внутри p:selectOneMenu. (Я использовал это p:selectOneMenu внутри пользовательского интерфейса:повтор)

Значения, которые будут заполнять меню «Выбрать один», необходимо изменить в зависимости от параметра, переданного компоненту.

Я попытался сделать следующее, но ошибка возникает как «Класс не имеет свойства «proceduresPerformedInAProcedureRoom».

Как я могу этого достичь ?

Файл JSF

 <table >
    <tr>
        <td>
            <p:outputLabel value="Room" ></p:outputLabel>
        </td>
        <td>
            <p:selectOneMenu value="#{ii.ci.institutionValue}" >
                <f:selectItem itemLabel="Please select" ></f:selectItem>
                <f:selectItems value="#{webUserController.loggableProcedureRooms}"
                               var="ipr"
                               itemLabel="#{ipr.name}"
                               itemValue="#{ipr}">
                </f:selectItems>
                <f:ajax event="change" execute="@this" render="prM lblPrM" ></f:ajax>
            </p:selectOneMenu>
        </td>
    </tr>
    <tr>
        <td>
            <p:outputLabel id="lblPrM" value="Procedures for #{ii.ci.institutionValue}" ></p:outputLabel>
        </td>
        <td>
            <p:selectOneMenu id="prM" value="#{ii.addingItem.ci.itemValue}" >
                <f:selectItem itemLabel="Please select" ></f:selectItem>
                <f:selectItems value="#{relationshipController.proceduresPerformedInAProcedureRoom}" 
                               var="li"
                               itemLabel="#{li.displayName}" 
                               itemValue="#{li}">
                    <f:param name = "procedureRoom" value = "#{ii.ci.institutionValue}" />
                </f:selectItems>
            </p:selectOneMenu>
        </td>
    </tr>
</table>
 

Контроллер

 public List<Item> proceduresPerformedInAProcedureRoom(Institution procedureRoom){
    List<Relationship> rs = findRelationships(institution, RelationshipType.Procedure_for_institution);
    List<Item> ps = new ArrayList();
    for(Relationship r:rs){
        ps.add(r.getItem());
    }
    return ps;
}
 

Комментарии:

1. Не используйте параметр, но получите заданное значение из (другого) компонента.

2. в чем дело <f:selectItems value="#{relationshipController.proceduresPerformedInAProcedureRoom(ii.ci.institutionValue)}" ?

3. Ты не появился ui:repeat . Я догадался ii , что это ваш var вход ui:repeat .

4. не могли бы вы переименовать его в «getProceduresPerformedInAProcedureRoom»?

5. Хм, я думаю, это должно быть правильно. Даже без get приставки. Вы получаете какие-либо сообщения об ошибках? Есть какие-нибудь намеки?