在作为PHP开发人员经历了大部分生活之后,我正在涉足JSP。我对Java非常熟悉,所以我开始认识Struts作为我选择的MVC框架。
我无法理解为什么要使用Struts taglib而不是标准HTML?
<s:textfield id="username" />
或
<input type="text" id="username" name="username" />
概念上有什么区别?我为什么要使用taglib而不是HTML?在Struts和JSP社区中是否有一个首选的方法?
答案 0 :(得分:3)
Struts 2标签有两个主要用途:
Struts 2使用“themes”来确定面向视图的标记的输出。例如,默认的“xhtml”主题将输入标签包装在表格行中,设置输入字段值,显示字段验证错误(如果有),以及可能还有一些我不记得的事情。
如果查看页面源代码,您可以准确地看到差异是什么,除了由后端功能确定的位,例如if / then around验证消息。
通常,自定义标记允许您以任意方式抽象视图层功能。 “首选方法”是不要手工完成,这是你需要做的,即使是复制最简单的功能,比如设置动作中的值并显示错误信息。
通过查看FreeMarker模板,您可以查看自定义标记的功能(假设您没有使用Java标记)。您可以在框架的范围内扩展这些模板,创建自己的模板等。
即使粗略检查S2标签和主题文档也应该回答这个问题。
答案 1 :(得分:0)
无法使用 pure HTML
访问服务器数据; TagLibraries
中JSP
的替代方法是 不 HTML
,但是旧的(和坏的)Scriptlet
第
最后的所有内容都将转换为HTML
,但您需要一个中间层来处理业务数据。
如何使用HTML
读取服务器端值?
长话短说:
一次是 Servlet
,其PrintWriter
输出HTML
:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
String myServerSideValue = "StackOverflow";
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.println("<html>");
writer.println("<head>");
writer.println("<title>Wait, what... a Servlet in 2013?!</title>");
writer.println("</head>");
writer.println("<body>");
writer.println("<span>Hello " + myServerSideValue + "</span>");
writer.println("</body>");
writer.println("</html>");
}
显然是一场噩梦,导致一些聪明人发明了JSP
和Scriptlet
:
<html>
<head>
<title>Wait, what... Scriptlets in 2013?!</title>
</head>
<body>
<span>Hello <%= myServerSideValue %> </span>
</body>
</html>
然后TagLib
出现了JSTL
:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>you <i>may</i> still needs JSTL with, for example, Spring MVC</title>
</head>
<body>
<span>Hello <c:out value="myServerSideValue" /> </span>
</body>
</html>
最后WebWork / Struts
将OGNL
带到了我们
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>you still needs JSTL with, for example, Spring MVC</title>
</head>
<body>
<span>Hello <s:property value="myServerSideValue" /> </span>
</body>
</html>
在OGNL
标记内使用Struts2
与JSTL
类似,但Struts2
中的更强大和完全集成以多种方式(Validation
,Theming
等)。
也许这个例子过于简单,无法理解为什么Struts2 Tags
应该使用Scriptlets
或其他TagLibs
,但是当涉及更复杂的现实场景时,您将开始欣赏并最大限度地利用这个伟大的工具。