【发布时间】:2017-01-10 09:01:29
【问题描述】:
我最近正在使用 Struts2 框架和验证我使用 XML 验证 功能的字段,该功能由 提供Struts2。并且这些字段已经过验证,但问题是,如果任何一个字段在验证后不为空,则这些字段值不会重新填充到相应的字段中。给出了示例代码。框架的版本是 2.5.x。
Login.jsp
<s:form method="post" action="authenticate">
<div class="form-group">
<span class="input-icon">
<s:textfield name="strUserName" id="strUserName" cssClass="form-control" placeholder="Username or Email"></s:textfield>
<i class="fa fa-user"></i>
</span>
<span>
<s:fielderror fieldName="strUserName"/>
</span>
</div>
<div class="form-group">
<span class="input-icon">
<s:password name="strPassword" id="strPassword" cssClass="form-control" placeholder="Password"></s:password> <i class="fa fa-lock"></i>
</span>
<span>
<s:fielderror fieldName="strPassword"/>
</span>
</div>
</s:form>
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.action.extension" value=",json"/>
<!-- Set to false before deploying the application -->
<constant name="struts.devMode" value="true" />
<constant name="struts.enable.SlashesInActionNames" value="true"/>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
<constant name="struts.configuration.xml.reload" value="false" />
<!-- constant to define global resource bundle -->
<constant name="struts.custom.i18n.resources" value="globalMessages" />
<constant name="struts.ui.theme" value="simple" />
<package name="<package_name>" namespace="/" extends="struts-default">
<action name="authenticate" class="<Action_class_name>" method="<method_name>">
<interceptor-ref name="store">
<param name="operationMode">STORE</param>
</interceptor-ref>
<interceptor-ref name="defaultStack" />
<result type="redirectAction">Successpage</result>
<result name="input" type="redirectAction">login</result>
</action>
<action name="login">
<interceptor-ref name="store">
<param name="operationMode">RETRIEVE</param>
</interceptor-ref>
<result>login.jsp</result>
</action>
</package>
</struts>
Action_name-validation.xml
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<validator type="requiredstring">
<param name="fieldname">strUserName</param>
<param name="trim">true</param>
<message key="errors.required"></message>
</validator>
<validator type="requiredstring">
<param name="fieldname">strPassword</param>
<param name="trim">true</param>
<message key="errors.required"></message>
</validator>
</validators>
Action_name.java
public class Action_name extends ActionSupport implements ModelDriven<UserModel> {
private UserModel user;
public String method_name() {
if(success){
return SUCCESS;
}else{
return INPUT;
}
}
@Override
public UserModel getModel() {
user = new UserModel();
return user;
}
}
应用程序 - 初始运行
申请 - 验证后
验证后不会重新填充值“xyz”。
【问题讨论】:
-
出于安全原因,您不应重新填充该字段。
-
@RomanC 它不仅在登录表单中,而且在其他具有相同配置的表单中都不起作用。
-
这就是为什么不工作但其他形式不相关的原因。
-
我不知道为什么它被标记为 Duplicate。它确实有相似之处,但这不是我在这里问的。我的代码中给出了一个类型 redirectAction 这就是为什么没有已填充,您不会在其他问题中找到它。因此,请在将其标记为重复之前阅读该问题。
-
重复问题是之前已经问过的问题。你问了几年前回答过的同一个问题,你的问题对社区没有用处。您应该知道 SO 不是 Help and Support* 网站,而是 Q&A。在将问题发布到此处之前,您应该知道how to ask 的问题。同样,您的问题已经解决了。
标签: validation struts2