有个填写客户信息的form表单,借助structs2.1的标签传递字段给CusAction.
在这个表单中,有些是[color=blue]必填字段[/color],希望设置标签中的[color=red]lable属性的颜色[/color]来提示,字段后面有“[color=indigo]提示文字[/color]”,
不知道该如何实现。
[b]问题补充:[/b]
对于一楼的建议做下解释:
若是采用了html代码,Action中要定义一大堆对应form表单的字段,再加上GET/SET方法,会有一大堆冗余代码,Action看起来太累。
对于二楼的建议,我查了下生成的html代码,如下:
在IE中生成html代码:
[code="java"]
如果在css中定义了lable,
表单中所用的标签都统一用此样式了。
问题是我[color=blue]只想让必填字段用此样式[/color]?
[b]问题补充:[/b]
一楼说的的确是一种实现方式,不过小弟不才,用css定义样式表有些望而却步。 看来又涉及到另一个问题了:Action取得form表单字段的方式。查了些资料,说有3中方式:
属性取值
Action须定义与form同名的字段属性,并提供get/set方法即可以取得form表单中的值。 不足之处是Action中定义的属性及相应的get/set方法有一大堆,看起来比较臃肿。
[code="java"] [/code]
2.领域取值
Action定义与form关联的对象,通过“对象名.属性名”取值,一楼说的应该是第二种吧?
[code="java"] [/code]
或者
[code="java"] [/code]
3.模型驱动
structs2独特的模型驱动方式,Action实现ModelDriven接口,并提供getModel() 方法,这样做的好处就是form中可以直接写“属性名”,Action就可取得form表单中对应的字段值。
[code="java"]public class CusAction extends ActionSupport implements ModelDriven{
privateCus cus=new Cus();
……
public Cus getModel() {
return cus;
}
}[/code]
cusAdd.jsp
[code="java"] <S:textfield name="tel" label="用户电话">[/code]
对于第2种方法和第3种方法,有何区别,用谁更好?
----[color=red]额外加5分求教[/color]
回到第一个问题:
目的是让[color=blue][size=x-small]"用户电话"[/size][/color]显示为蓝色(必填字段),其他[size=small]非必填字段[/size]标签内容显示为统一样式。
试过后发现 标签中 cssStyle可用,但只会改变输入文字的样式。
难道真的不可以在structs标签中定义lable颜色了吗?
1:楼主用的Struts2的theme应该是xhtml的,如果用这种的话要改变Label的颜色只能通过css实现了。
.tdLabel label{
}
如果楼主要求只能只读的才能使用的话,那么也比较简单,新增一种theme就可以了。
比如新增了theme="my",使得my集成xthml。然后在my下添加controlheader.ftl文件和controlheader-core.ftl(这两个文件可以从xhtml目录下Copy过来)。
修改这两个文件,在controlheader.ftl中指定使用my下的controlheader-core.ftl,在controlheader-core中碰到label的地方添加如下判断:
[code="xml"]<#if parameters.label??>
<#if parameters.id??>
for="${parameters.id?html}" <#t/>
</#if>
<#if hasFieldErrors>
class="errorLabel"<#t/>
<#else>
class="label"<#t/>
</#if>
[color=red]<#if parameters.required?default(false)>
style="color: red;"<#t/>
</#if>[/color]
><#t/>[/code]
红色部分是添加的。
然后在struts2中指定theme="my"即可
2和3的区别是:
2是把Action压栈,所以需要使用领域对象才能获取对象;
3是把领域对象压栈,所以可以直接获取属性
推荐使用原生html标签, struts2标签样式方面控制太过繁杂
生成什么样的HTML代码,然后再设置对应的CSS
[quote]Action中要定义一大堆对应form表单的字段,再加上GET/SET方法[/quote]{
比如Action 里面是用来处理用户的
public class Action extend ActionSupport{
private User user;//只要一个user对象就可以了.不需要很多的
//setter,getter
}
然后页面里面你可以这样写
不是可以加上一个id吗
<br> #id{<br> font-color:red;<br> }</p>
[code="jsp"] [/code]
不建议使用,jsp只关心参数就可以了.而cus.tel还有关心对象的相关属性,增加了耦合性.最近看了一个视频也不建议这样做.