【发布时间】:2021-02-22 23:21:14
【问题描述】:
为了减少具有相似行为的视图之间的重复代码,我一直在使用如下复合组件:
employee_task_view.xhtml
<stk:task_table_component viewBean="#{myTaskViewImplementation}" id="taskComp" myself="true" actionColumn="false" showWaivedColumn="#{auth.userHasRole('adminStatuses')}" />
manager_roster_task_view.xhtml
<stk:task_table_component viewBean="#{managerTaskViewImplementation}" id="taskComp" myself="false" actionColumn="true" showWaivedColumn="#{auth.userHasRole('adminStatuses')}" />
传入不同的视图bean。但现在想减少复合组件本身内的重复代码。例如,我想清理基本上重复的创建和更新对话框表单,除了我是从数据表行引用selected item 还是要插入New Item。
task_table_component.xhtml
<p:dialog id="addTaskDialogId" header="Add Task #{cc.attrs.viewBean.employeeToView ne auth.employee ? ' for '.concat(cc.attrs.viewBean.employeeToView.lname) : ''}" dynamic="true"
widgetVar="addTaskDialogWv">
<h:form id="addTaskFormId">
<p:outputLabel id="taskTitleLbl" value="Task Title : " for="taskTitle" />
<p:inputText id="taskTitle" value="#{cc.attrs.viewBean.newTask.title}" />
...
</p:dialog>
<p:dialog id="editTaskDialogId" header="Edit task #{cc.attrs.viewBean.selectedTask.id}" dynamic="true" widgetVar="editTaskDialogWv">
<h:form id="editTaskFormId">
<p:outputLabel id="taskTitleLbl" value="Task Title : " for="taskTitle" />
<p:inputText id="taskTitle" value="#{cc.attrs.viewBean.selectedTask.title}" />
...
</p:dialog>
如何参数化 cc.attrs.viewBean.newTask.title 和 cc.attrs.viewBean.selectedTask.title 以减少到只有一个弹出 p:dialog?我发现自己重新调整了其中一个对话框布局,却发现我忘记在另一个对话框中进行相同的调整。
【问题讨论】:
-
#{cc.attrs.viewBean[cc.attrs.taskObjectName].title}怎么样?