Struts2 自带的例子Struts2-blank 学习三问

我的Struts版本是:Struts2.2.3.1。 把它自身带的例子都导入到了Eclipse中。

 

 

在其自带的例子Struts2-blank中,

Package.properties 文件中包含:  requiredstring = ${getText(fieldName)} is required.

我的理解如下:

${getText(fieldName)}是一个OGNL表达式。getText是ActionSupport的方法。

问题一:

请问 fieldName是什么,怎么理解?可以向上追溯到哪里?为什么必须写成fieldName,不能写成Foo?

 

在example.xml文件中有如下配置:

<action name="Login_*" method="{1}" class="example.Login">

            <result name="input">/example/Login.jsp</result>

            <result type="redirectAction">Menu</result>

</action>

在login.jsp文件中的form定义如下:

<s:form action="Login">

    <s:textfield key="username"/>

    <s:password key="password" />

    <s:submit/>

</s:form>

 

如果我填写的信息不完整,点击确定提交以后,这个form提交给了Login.action。

如果我填写的信息完整,则会转到Menu.action。

问题二:

请问,配置文件中分明配置的是Login_*,那么login.jsp文件form的目的地Login怎么能够匹配过去呢?分明有一个下划线不匹配啊?

另外,Login.java中,没有定义execute意外的方法,那么,配置文件中用通配符配置action,还有什么意义吗?如在本例中,jsp页面没有明确指定method,那么struts框架会自动调用execute方法吗?

 

在eclipse中,Login-validation.xml会出现

The file cannot be validated as the host "www.opensymphony.com" is currently unreachable.

这样的waring。

原因在于Login-validation.xml中有这样一句

<!DOCTYPE validators PUBLIC

        "-//OpenSymphony Group//XWork Validator 1.0.2//EN"

        "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

问题三:

请问如何能够避免出现这样的提示信息?能用xwork-core-2.2.3.1.jar中的xwork-validator-1.0.2.dtd来替换掉吗?如果能,如何替换?

[quote]对于问题一,请问fieldName是否是保留字??

对于问题二,您可能还没有看太仔细题目,在JSP页面中指定的action是action="Login" 而非action="Login_",所以我认为匹配不过去,但是实际上程序运行的时候是匹配过去了,呵呵,我搞不明白。 [/quote]

fieldName 是关键字

问题二中,,Login_* Login是 LoginAction.java, *是LoginAction.java 中的方法

问题一:
${getText(fieldName)},这个用来获取页面中的表单的name的值。
在XXX-validation.xml中设置 即可。这是怎么回事呢?其实${}里面的内容是一段Java 代码,它将进而调用ActionSupport 类中的 getText()方法,方法的参数就是被验证的field 的名字,例如验证 username 时,消息资源文件中还必须有一个名为username 属性。
问题二:
jsp页面没有明确指定method,那么struts框架会自动调用execute方法的;
Login_*代表这个action处理所有以Login_开头的请求,是对应JSP页面的
这个方法的,如:如jsp文件中请求Login_validateUser的action名称是对应 配置文件中对应类的 validateUser()方法的