【发布时间】:2013-06-05 08:53:35
【问题描述】:
<s:select> 和 <html:select> 标签有什么区别?使用两个不同的标签来填充下拉列表的目的是什么?
【问题讨论】:
-
你能贴出简单的代码吗
-
抱歉错字。我纠正它
<s:select> 和 <html:select> 标签有什么区别?使用两个不同的标签来填充下拉列表的目的是什么?
【问题讨论】:
没有区别。这取决于prefix
如果你使用这个
<%@ taglib prefix="s" uri="/struts-tags" %>
然后使用
<s:select>
如果你使用这个
<%@ taglib prefix="html" uri="/struts-tags" %>
<html:select>
然后使用
【讨论】:
好吧,这取决于您在谈论什么方面,并且以上两个答案都以自己的方式正确。
这里可以有两个方面
通常所有使用过旧版本 Struts 的人都知道使用 html 作为标签前缀,Andrea Ligios 对此进行了很好的解释。
一般来说,当我们使用 Struts2 标签时,我们使用 s 作为前缀,但这只是一个约定,您可以使用任何约定(前缀),例如 <s:select>, <html:select>, <myprefix:select>。
所有你需要告诉框架什么前缀,你想在模板文件中的以下行的帮助下使用
<%@taglib prefix="prefix of you choice" uri="/struts-tags" %>
尽管我确信您可能已经在两个地方看到过代码,其中一个代表旧 Strut,另一个代表 Struts2 版本。
【讨论】:
<html:select> 和 <html:something 标签是 Struts 1 标签库的一部分,特别是 tags-html 库:
<%@taglib prefix="html" uri="http://struts.apache.org/tags-html" %>
<html:select ...>
Example of usage of Struts1's <html:select>
,而<s:select> 和<s:something 标签是Struts 2 标签库的一部分,
特别是 struts-tags 库:
<%@taglib prefix="s" uri="/struts-tags" %>
<s:select ...>
Example of usage of Struts2's <s:select>
编辑
正如@UmeshAwasthi 让我注意到的那样,这可能不是一个约定,而不是代码语法;
这意味着,如果某个不喜欢标准的疯子想要反转标签库的前缀,HE CAN,就像他可以写的一样Integer myDouble = new Integer(); ... 只是语义坏了,语法没问题。
但是,由于我猜您的问题产生的疑虑(与我多年前一样)是由于这两种语法(<html: 和 <s:)在网络上多次出现,相信我,他们总是引用正确的库(至少在在线文章中,可能并不总是在某些问题这里或coderanch等中)。
总结起来,约定(不是规则,只是规则)是:
html = Struts 1
s = Struts 2
c = JSTL
【讨论】:
html 前缀是Struts1 的一部分,我们也可以在Struts2 中使用它
<html:,那么他们正在谈论Struts1,如果您看到<s:,他们在谈论 Struts2。我从来没有见过他们倒置的一个案例,尽管这是可能的。您甚至可以将 FooInterceptor 称为 Action 并将 FooAction 称为 Interceptor,没有人会阻止您,除了常识和一点智慧;)
两个标签名称相同,但标签前缀定义的命名空间不同。
如果您想使用其他标签库,其标签的名称已经在使用,那么最好在不同的命名空间下定义这些标签库,这样标签名称就不会发生冲突以实现不同的行为。
为了确保标签名称不会发生冲突,最好使用带有不同命名空间前缀的其他标签库。
【讨论】: