Параметризация действий для Композиций - PullRequest
1 голос
/ 02 февраля 2012

Я обнаружил, что некоторые таблицы встречаются в моем приложении довольно часто, и я пытаюсь упаковать их как композиции. Вот выдержка из того, что я придумал:

<p:dataTable var="permission" value="#{permissionList}"
  id="permissionTable">
    <p:column headerText="Edit" rendered="#{showEdit}" style="width:50px">
        <p:rowEditor />
        <p:commandLink action="#{removeAction}" update="permissionTable">
            <span class="ui-icon ui-icon-close" />
        </p:commandLink>
    </p:column>
</p:dataTable>

В настоящее время есть три параметра:

  • permissionList содержание таблицы
  • showEdit для включения и выключения параметров встроенного редактирования, которые невозможны во всех местах.
  • removeAction потому что удаление разрешения может означать удаление его из роли, субъекта или удаление в зависимости от контекста.

Включение таблицы разрешения теперь выглядит следующим образом:

<ui:include src="compositions/permissionTable.xhtml">
    <ui:param name="permissionList"
      value="#{permissionRoleDetailBean.role.permissions}" />
    <ui:param name="showEdit" value="#{true}" />
    <ui:param name="removeAction"
      value="#{permissionRoleDetailBean.removePermission(permission)}" />
</ui:include>

К сожалению, есть проблема с параметром removeAction. Все, что я передаю, кажется пустым, когда включено. Я признаю, что использование контекстного имени параметра (permission), вероятно, похоже на попрошайничество.

Так как же я мог

  • Получите мой подход выше, чтобы работать?
  • Правильно ли выполнять действия для композиций? Я почему-то подозреваю, что упускаю что-то фундаментальное.

1 Ответ

1 голос
/ 02 февраля 2012

Я представлял что-то вроде этого:

allowTable.xhtml (помещается в папку ресурсов JSF)

<html
namespaces go here>
<cc:interface></cc:interface>
<cc:implementation>
    <p:dataTable var="permission" value="#{permissionRoleDetailBean.role.permissions}" id="permissionTable">
        <p:column headerText="Edit" rendered="#{cc.attrs.rendered}" style="width:50px">
            <p:rowEditor />
            <p:commandLink action="#{permissionRoleDetailBean.removePermission(permission)}" update="permissionTable">
                <span class="ui-icon ui-icon-close" />
            </p:commandLink>
        </p:column>
    </p:dataTable>
</cc:implementation>


страница использует

<myComp:permissionTable rendered="#{showEdit}" />
...