我已经找到了几种使用if
/else
标记的方法以及如何在<tr>
标记中使用它。
但是可以在<s:textfield>
标签中使用它吗?
如果某个参数为真,我想禁用几个字段(文本字段和日期选择器)。目前,我有两次完整的代码。一次有disable="true"
,一次没有。这使得jsp 非常冗长。
如果有更好/更短的方法,我会很高兴。
这个问题有很多解决方案,每一个都根据标签的数量、所需的最干净/最短的代码比率等来更好地拟合它……
例如,您可以
设置一个变量并在您的文本字段中使用它:
<s:set var="disabled" value="%{condition}"/>
<s:textfield ... disabled="%{#disabled}" />
使用返回布尔值的操作方法,如@PredragMaric 答案:
public boolean getConditionFromAction(){
return (foo!=bar);
}
<s:textfield ... disabled="%{conditionFromAction}" />
创建两个 JSP 片段并包含它们(在刚刚禁用的情况下过度杀伤,但在其他情况下很有帮助,例如显示一组完全不同的字段)
<s:if test="%{condition}">
<s:include page="snippetA.jsp" />
</s:if>
<s:else>
<s:include page="snippetB.jsp" />
</s:else>
(在这种情况下,记得把
<%@ taglib prefix="s" uri="/struts-tags" %>
也在片段中)。
在页面加载时使用 javascript 禁用它们(使用 jQuery 的示例):
<script>
$(function(){
<s:if test="%{condition}">
$("input[type='text']").attr('disabled','disabled');
</s:if>
<s:else>
$("input[type='text']").removeAttr('disabled');
</s:else>
});
</script>
(更好地使用类选择器)。
关于您的最新评论:
如果某个条件为真,我想禁用这些字段以使进一步的编辑变得不可能。
请记住,您必须在服务器端执行控制,因为每个用户都可以更改 HTML / DOM(使用 Firebug、FF DevTools、Chrome DevTools 等),或者只是临时伪造请求,甚至无需访问您的页面,并启用您已禁用的字段。
客户端验证是用户友好的,并被视为第一个过滤器,服务器端验证是强制性的。
尝试在里面使用这个表达式<s:textfield>
disabled="%{myCondition}"
wheremyCondition
应该评估为true
or false
。