如何根据条件或列值将行值作为链接

时间:2017-10-23 09:40:43

标签: java jsp displaytag

我有一个表格,显示用户名以及用户是否是管理员。

Username         Administrator     
user1            Yes
user2            No   
user3            No
user4            Yes

这是表的代码,它工作正常。

<display:table name="${userTable}" class="users" uid ="row">
<display:column style="width: 8%" title="Username" property="username" maxLength="30" sortable="true" />
<display:column style="width: 4%" title="Administrator" property="usertype" sortable="true" />
</display:table>

我想做的是,如果用户是管理员,那么&#34;是&#34;将成为表格中的可点击链接,允许管理员点击访问另一个页面;而如果用户不是管理员,那么&#34; No&#34;只是表格中的一个简单文字。

我开始编写一些代码,但是,我认为我误解了<display:column><s:if>的用法。这是因为我有两个想法来实现它但都失败了。所以我正在寻找某人向我展示正确的方向并纠正我的概念。

这是我的第一个想法。

<display:table name="${userTable}" class="users" uid ="row">
<display:column style="width: 8%" title="Username" property="username" maxLength="30" sortable="true" />
<s:if test="#session.USER_SESSSION_HANDLE.usertype.contains(\"Yes\")">
<display:column style="width: 4%" title="Administrator" property="usertype" sortable="true" />
</s:if>
</display:table>

当我运行代码时,表没有任何更改,我的意思是在管理员列中,如果值为&#34;是&#34;则没有可点击链接,它只是一个普通文本。所以我的第一个想法并不成功。

我删除了以前的代码。这是我的第二个想法:

<display:table name="${userTable}" class="users" uid ="row">
<display:column style="width: 8%" title="Username" property="username" maxLength="30" sortable="true" />
<display:column style="width: 4%" title="Administrator" property="usertype" sortable="true" />

<display:column style="width: 5%" title="Link for Administrator" sortable="true">
<s:if test="#session.USER_SESSSION_HANDLE.usertype.contains(\"Yes\")">
<s:url var="editURL" namespace="/AdminLink" action="adminLink_edit">
<s:param name="recordId" value="%{#attr.row.recordId}" />
</s:url>
<s:a href="%{editURL}">It is a link</s:a>
</s:if>
<s:else>
<s:label>It is not a link</s:label>
</s:else>
</display:column>

</display:table>

在我的第二个想法中,我创建了另一个列来显示它是链接还是链接。如果是链接,则应该可以点击以进一步访问,如果它不是链接,则显示为文本。

当我运行代码时,会创建新列,但所有行都会显示&#34;它是一个链接&#34;甚至管理员专栏显示&#34;否&#34;在行中。

我注意到我可能使用user1来访问应用程序,因为user1是管理员所以它的行应该显示&#34;它是一个链接&#34;但是,我不明白为什么它会显示到所有行。

后来我使用user2(这个用户名不是管理员)访问系统,我看到所有行显示&#34;它不是一个链接&#34;再次,我不明白为什么它影响到所有行。我想因为我使用<s:if test="#session.USER_SESSSION_HANDLE.usertype.contains(\"Yes\")">?但为什么它会向所有行显示相同的结果?

我要做的是做出#34;是&#34;作为可点击的链接,&#34; No&#34;只是一个简单的文字。示例表将如下所示。 (对不起,我意识到我不能放underline,所以我把**放在&#34;是&#34;

Username         Administrator     
user1            **Yes**
user2            No   
user3            No
user4            **Yes**

实际上,我认为我的第一个想法可以实现但不会成功,我不想使用额外的列来显示链接。

然而,我的第二个想法也没有成功,我不确定哪个部分会导致问题。

有人会让我知道我的错误并提出有关如何根据条件或列值将行值作为链接的建议吗?非常感谢。

1 个答案:

答案 0 :(得分:0)

我想我明白了。解决方案专注于我的第二个想法,我将为此部分创建另一个专栏。

我需要稍微改变一下这段代码

<s:if test="#session.USER_SESSSION_HANDLE.usertype.contains(\"Yes\")">

应该是

<s:if test="#attr.row.usertype eq 'Yes'>

因此该列的完整代码将是这样的

<display:column style="width: 5%" title="Link for Administrator" sortable="true">
<s:if test="#attr.row.usertype eq 'Yes'>
<s:url var="editURL" namespace="/AdminLink" action="adminLink_edit">
<s:param name="recordId" value="%{#attr.row.recordId}" />
</s:url>
<s:a href="%{editURL}">It is a link</s:a>
</s:if>
<s:else>
<s:label>It is not a link</s:label>
</s:else>
</display:column>