您可以删除Lift CRUDify表单上的“查看/编辑/删除”链接吗?

时间:2011-11-16 19:37:51

标签: scala lift

我正在使用Lift快速推送一个CRUDify应用程序,我需要对其中一个数据库表进行只读访问。

我已经研究了如何通过在映射器对象中将calcCreateItem设置为Empty来从导航菜单中删除该表的“创建”选项。

但是,为了使其成为只读,我还需要删除该表的CRUDify表单的每一行上的“编辑”和“删除”链接。我想继续删除“查看”链接,当我在它时(所有表格的字段已经显示在列表表格中)...但如果我必须,我可以使用“查看”链接

是否有人知道如何使CRUDify“列表”表单上的记录不包含每行最右侧的“查看”/“编辑”/“删除”链接?

2 个答案:

答案 0 :(得分:3)

Kim的IfValue解决方案可能是最简洁的,但对于新手来说可能不是最容易理解的。您也可以在您的实体上override def _showAllTemplate。它在Crudify特征中定义如下,因此您可以删除链接TD。请注意,即使链接没有出现在模板中,它们仍然可以访问,因此您需要从SiteMenu中阻止它们。要做到这一点,最好只是覆盖菜单locs而不是calcCreateItem方法。

override def createMenuLoc: Box[Menu] = Empty
override def editMenuLoc: Box[Menu] = Empty
override def viewMenuLoc: Box[Menu] = Empty

def _showAllTemplate =
<lift:crud.all>
<table id={showAllId} class={showAllClass}>
  <thead>
    <tr>
      <crud:header_item><th><crud:name/></th></crud:header_item>
      <th>&nbsp;</th>
      <th>&nbsp;</th>
      <th>&nbsp;</th>
    </tr>
  </thead>
  <tbody>
    <crud:row>
      <tr>
        <crud:row_item><td><crud:value/></td></crud:row_item>
        <td><a crud:view_href="">{S.??("View")}</a></td>
        <td><a crud:edit_href="">{S.??("Edit")}</a></td>
        <td><a crud:delete_href="">{S.??("Delete")}</a></td>
      </tr>
    </crud:row>
  </tbody>
  <tfoot>
    <tr>
      <td colspan="3"><crud:prev>{previousWord}</crud:prev></td>
      <td colspan="3"><crud:next>{nextWord}</crud:next></td>
    </tr>
  </tfoot>
</table>

答案 1 :(得分:0)

您可以覆盖editMenuLocParamsdeleteMenuLocParams以删除编辑和删除链接。以下是我的一个项目的例子:

override def editMenuLocParams = 
  new Loc.IfValue[Exercise](deleteEditAllowed, errorAndRedirect _) :: 
    super.editMenuLocParams

另见scaladoc for Loc.IfValuedeleteEditAllowed是一个函数,它接受mapper类的Box并返回一个布尔值,指示是否允许编辑。 errorAndRedirect的类型为() ⇒ LiftResponse。它显示错误并重定向。