第3.6式. 从图像提交表单

问题

你想要使用户能够通过点击一个不在HTML表单标签中的图像来提交表单。

动作要领

适应一个对JavaScript URL 的链接来提交表单:


<html:link href="javascript:document.myform.submit(  )">
    
<html:img page="/submit-form.gif" 
               alt
="Submit" border="0"/>
 
</html:link>


 

动作变化

Web 应用经常使用可点击的图像来提交表单而不是仅仅通过表单按钮。Struts 的html:image标签可以用来产生一个显示图像的HTML input type="image" 标签。但是,对于复杂的 HTML 布局,并不总是能够将图像嵌入在表单<form> . . . </form>标签之中。有些时候,一个 HTML 页面可能在页面的某一段可能有多个表单,而提交页面的图像则在页面的另一个区域。比如,工具条风格的图像按钮。

上面的方法可以用于从表单之外的图像提交表单。所显示的图像嵌套在html:link标签中。该链接通过执行一行JavaScript来提交表单。在上面的代码中,JavaScript 将提交名为MyForm 的表单。表单名称必须匹配struts-config.xml文件中所配置的action元素的name属性。下面是这种方法产生的HTML 代码:

 

<href="javascript:document.myform.submit(  )">
    
<img src="/myapp/struts-power.gif"
         border
="0" alt="Submit">
</a>

 

虽然你可以直接使用上述HTML标记而不是Struts html标签,如果那样的话你将失去那些标签所提供的特征。通过使用Struts tag,你就不是必须要指定context 名称,并且你可以使图像名称和替换文本来自于资源束 (如果你需要的话)。

另一个办法是使用html:img 标签的onclick属性:

 

<html:img page="/submit-form.gif"
       onclick
="document.MyForm.submit( );"
           alt
="Submit" border="0"/>

 

这种方式的缺点是,有些浏览器并不提供图像是可以点击的一些可视提示线索。因为图像嵌入到一个链接中,大多数浏览器都会在改变鼠标指针以提示该图像是可以点击的。

如果你想要你的应用在浏览器禁止JavaScript的情况下也能够进行,还应该在表单中的某处提供一个常规的提交按钮。

 

相关招式

第3.9式会描述如何在表单的action属性中指定的地方将表单提交到另外一个URL。