⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 building_view.html

📁 Struts中文文档
💻 HTML
📖 第 1 页 / 共 3 页
字号:
        <p>
       	在任何情况下,字段标签都必须内置在<code>form</code>标签中,这样这些字段才知道用哪个bean来得到初始值。
        </p>
      </blockquote></td></tr></table><a name="presentation_tags"></a><table width="100%" cellpadding="5" cellspacing="5" border="0"><tr><td bgcolor="#023264"><font size="+1" face="arial,helvetica,sanserif" color="#ffffff"><strong>3.3.3 其它有用的表示层标签</strong></font></td></tr><tr><td><blockquote>
        
        <p>
        有好几个有用的tag用来创建表示层,请查阅它们的标签库的文档和Tag Develipers Guide得到更多的信息:
        </p>
        
        <ul>
       
          <li>[逻辑] <a href="../struts-logic.html#iterate">iterate 枚举</a> 为一个列表中的所有元素重复输出标签。(这个列表可能是 Enumeration,Hashtable,  Vector, 或者对象数组)。</li>
          <li>[逻辑] <a href="../struts-logic.html#present">present 存在</a> 根据一个指定的属性,这个tag在当前的request中检查,如果这个属性存在的话就显示它所包含的页面内容。每次使用这个标签的时候只能指定一个属性,名字是必需的。属性可以包括cookie, header,name,parameter,property,role,scopr还有user。
          </li>
          <li>[逻辑] <a href="../struts-logic.html#notPresent">notPresent 不存在</a> 和present作用相反的标签,当指定的属性不存在的时候显示。</li>        
          <li>[html] <a href="../struts-html.html#link">link 连接</a> 创建一个 &lt;a&gt; HTML元素,作为一个锚点或者指向指定URL的超链接,它会自动进行URL编码,以在不支持cookie的时候维护session状态。</li>
          <li>[html] <a href="../struts-html.html#img">img 图像</a> 创建一个 &lt;img&gt; HTML元素,它可以动态改变"src"和"lowurl"中指定的URL,和&lt;html:link&gt;的方式相同。
         </li>  
          <li>[bean] <a href="../struts-bean.html#parameter">parameter 参数</a> 获取特定的request 参数的值,把结果作为一个page范围的属性,类型是字符串或者字符串数组。</li>
        </ul>
      </blockquote></td></tr></table><a name="form_validation"></a><table width="100%" cellpadding="5" cellspacing="5" border="0"><tr><td bgcolor="#023264"><font size="+1" face="arial,helvetica,sanserif" color="#ffffff"><strong>3.3.4 自动form检查</strong></font></td></tr><tr><td><blockquote>    
     
        <p>
        除了上文提到的form和bean之间的交互之外,Struts还提供了附加的机制来检查它接收到的输入字段。要使用这个特性,在你的ActionForm中重载下面的这个类:
        </p>

<pre>public ActionErrors
  validate(ActionMapping mapping,
    HttpServletRequest request);
</pre>
        
        <p>
          validate() 方法在bean的属性被自动填充之后,在对应的Action类的<code>porform()</code>方法调用之前由controller servlet自动调用。<code>validate()</code>方法有下面几个选择:
        </p>
        
        <ul>
          <li>进行了恰当的检查,没有发现任何问题——返回<code>null</code>或者长度为零的ActionError实例,Controller servlet会继续调用对应的<code>Action</code>类的<code>的perform()</code>方法。</li>
          <li>进行了恰当的检查,发现了问题。——返回一个包含<code>ActionError</code>的ActionErrors实例,它包含了应该显示错误信息的关键字(位于程序的<code>MessageResources</code> 信息资源库中的关键字)。controller servlet会把这个数组保存为request的属性,以便<code>&lt;html:errors&gt;</code>标签使用,并且流程会重新转回到输入form(通过<code>ActionMapping</code>的<code>input</code>属性得到)。</li>
        </ul>
          
        <p>
        前面曾经提到过,这个特性完全是可选的。默认的validate()方法返回<code>null</code>,controller servelt会认为对应的Action类会做必要的检查。
        </p>
        <p>
        另一个常用的方式是在ActionForm的validate()方法中进行简单的主要的检查,在Action里面做“商业逻辑”检查。
        </p>
        <p>
        在夜间编译包和下列地址还有一个可选的ActionForm检查的包可以使用:<a href="http://home.earthlink.net/~dwinterfeldt/">David Winterfeldt的网站</a>。
        </p>
      </blockquote></td></tr></table><a name="other_presentations"></a><table width="100%" cellpadding="5" cellspacing="5" border="0"><tr><td bgcolor="#023264"><font size="+1" face="arial,helvetica,sanserif" color="#ffffff"><strong>3.4 其他表示层技术</strong></font></td></tr><tr><td><blockquote>
    
      <p>
      虽然你的程序的观感可以完全用标准的JSP和Struts的自定义标签库创建,你也许会考虑动用其他技术来增加部件重用,减少维护工作,并且/或者减少错误。下面几节讨论了几种可选项。
      </p>
    </blockquote></td></tr></table><a name="custom_tags"></a><table width="100%" cellpadding="5" cellspacing="5" border="0"><tr><td bgcolor="#023264"><font size="+1" face="arial,helvetica,sanserif" color="#ffffff"><strong>3.4.1 
针对程序的自定义标签</strong></font></td></tr><tr><td><blockquote>
      
        <p>
        除了Struts定义的自定义标签,你针对你正在编写的程序创建标签也很容易,这会帮助你编写用户界面。通过针对下面的程序编写tag,Struts附带的示例程序描绘了基本原理:
        </p>
        
        <ul>
          <li><b>checkLogon</b> - 检察是否存在一个特定的session对象,并且如果没有的话就转向到登录页面。这可以防止用户在使用你的程序到一半的时候,把页面用书签记录下来,试图以后跳过登录这一步。或者防止session失效。</li>
          <li><b>linkSubscription</b> - 生成一个指向明细页面的超连接,它传递需要的主键的值作为request属性。这在列出用户拥有的订阅纪录时有用,它提供了编辑或者删除订阅信息的链接。</li>
          <li><b>linkUser</b> - 生成一个指向用户详细信息页面的超链接,把需要的主键信息作为request属性传递。</li>
        </ul>
          
        <p>
        这些tag的源代码都在<code>src/example</code>目录下,位于<code>org.apache.struts.example</code>包中,和其它在程序中需要的java类在一起。
        </p>
      </blockquote></td></tr></table><a name="includes"></a><table width="100%" cellpadding="5" cellspacing="5" border="0"><tr><td bgcolor="#023264"><font size="+1" face="arial,helvetica,sanserif" color="#ffffff"><strong>3.4.2 用Include(引用)来组合页面</strong></font></td></tr><tr><td><blockquote>
        
        <p>
        用一个JSP页面(包括子定义标签和Bean来取得必要的动态数据)在生成整个表现是一个很普通的方式,在Struts的示例程序中也出现过。然而,很多程序需要在同一个页面中显示多个不同的单一逻辑部分的组合。
        </p>
          
        <p>
        举例,一个门户站点可能在门户的主页上有以下几个功能部分:
        </p>
        
        <ul>
          <li>显示门户的搜索引擎</li>
          <li>一个或多个"新闻"显示部分,根据用户登记的个性文件中的兴趣组合。</li>
          <li>显示关于这个门户的讨论主题</li>
          <li>一个“有邮件在等待”提示,如果你的门户提供免费邮件账户。</li>
        </ul>
          
        <p>
        如果你能把工作分成不同的部分,为每个部分分配不同的开发者,开发工作会容易些。那么你需要用JavaServer Pages技术中的<i>include(包含)</i>能力,或者Struts提供的include 标签来把不同的页面结果组合到一起去。取决于你需要在什么时候组合你的输出,有三种不同的<i>include</i>可供选择:
        </p>
          
        <ul>
          <li>一个 <code>&lt;%@ include file="xxxxx" %&gt;</code>指令可以包含一个包括Java代码或者JSP标记的页面。其中的代码甚至可以访问父页面之前定义的变量。在JavaServer Page编译之前,这段代码已经被包含了,所以它可以包含的不只是HTML代码。</li>
          <li> include <i>action(动作,这里指JSP中的标准指令)</i>(<code>&lt;jsp:include page="xxxxx"
              flush="true" /&gt;</code>)在请求时被处理,服务器会透明的处理它。除此以外,这意味着你通过在一个类似<a href="../struts-logic.html#equals">equals</a>这样使用参数的标签中编写这条请求,可以有条件的进行包含。</li>
          <li><a href="../struts-bean.html#include">bean:include</a>读取一个"forward"参数通过一个逻辑名字映射到一个被包含的jsp页面,或者读取"id"参数,打印一个页面上下文的字符串变量到jsp页面上。</li>
        </ul>
        <p>
        另一个方法是使用Struts Template Tag library(模版标签库)。察看Developer's Guide得到详细信息。
        </p>  
        <p>
        Tiles是一个原来的Template Tag library的替代品,提供几处增强和新功能。Tiles位于夜间编译包,或者在<a href="http://www.lifl.fr/~dumoulin/tiles/">Cedric Dumoulin的网站</a>。
        </p>
      </blockquote></td></tr></table><a name="image_rendering"></a><table width="100%" cellpadding="5" cellspacing="5" border="0"><tr><td bgcolor="#023264"><font size="+1" face="arial,helvetica,sanserif" color="#ffffff"><strong>3.4.3 图像生成部件</strong></font></td></tr><tr><td><blockquote>
      
        <p>
        有一些程序需要动态生成图像,比如价格图或者股票报告等等。一般有两种不同的方法满足这个需求:
        </p>
        
        <ul>
          <li>显示一个指向servlet请求的超链接。这个servlet会使用一个图像库来渲染出图像,把输出改为合适的内容类型(比如<code>image/gif</code>),并送出图像的字节流到浏览器。浏览器会像一个静态图像一样显示它。</li>
          <li>生成必要的HTML代码来下载一个Java applet来创建需要的图像。通过在生成的代码中传送初始化参数,你可以决定图像。或者applet也可以自行和server连结以取得这些参数。</li>
        </ul>
      </blockquote></td></tr></table><a name="text_rendering"></a><table width="100%" cellpadding="5" cellspacing="5" border="0"><tr><td bgcolor="#023264"><font size="+1" face="arial,helvetica,sanserif" color="#ffffff"><strong>3.4.4  生成文字</strong></font></td></tr><tr><td><blockquote>

         <p>
         有些程序需要动态生成文本或者打包的文本,例如XML.如果整个页面都是被生成的,可以用PrintWriter输出,从Action里可以很容易的办到:
         </p>
         <pre>
           response.setContentType("text/plain"); // or text/xml
           PrintWriter writer = response.getWriter();
           // use writer to render text
           return(null);
         </pre>

        <p align="center">
          下一章: <a href="building_controller.html">构造 Controller (控制器)部件</a>
        </p>
      </blockquote></td></tr></table>
  </body></td></tr><tr><td colspan="2"><hr></td></tr><tr><td colspan="2"><div align="center"><font size="-1" color="#023264"><em>
        Copyright (c) 2000-2002, Apache Software Foundation
        </em></font></div><img border="0" align="right" src="../images/struts-power.gif"></td></tr></table></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -