- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
尝试在 Struts 2.3.4 上使用验证方法但出现以下错误:
java.lang.NullPointerException
at com.action.LogonAction.validate(LogonAction.java:66) more......
Action 类:
public class LogonAction extends ActionSupport{
private Logon logon;
public Logon getLogon() {
return logon;
}
public void setLogon(Logon logon) {
this.logon = logon;
}
public String execute(){
return SUCCESS;
}
public void validate(){
if(logon.getUserName() == null || logon.getUserName().equals("")){
addFieldError("logon.userName", "userName required");
}
}
登录类:
public class Logon {
private String password;
private String userName;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
struts.xml:
<struts>
<package name="struts2" namespace="/" extends="struts-default">
<action name="login" class="com.action.LogonAction">
<result name="input">Login.jsp</result>
<result name="success">success.jsp</result>
</action>
</package>
jsp:
<s:form action="login" method="post">
<table>
<tr>
<td>User name:<s:textfield name="userName"/>
<tr>
<td><s:submit type="button" value="submit" label="Submit" /></td>
</tr>
</table>
</s:form>
除了使用新版本的 Struts2 之外,还有什么办法可以解决这个问题吗?因为我发现一个帖子说Struts 2.3.4有validate方法的bug。
最佳答案
下面的代码中有NullPointerException
if(logon.getUserName() == null || logon.getUserName().equals("")){
这只有在 logon
为 null
时才会发生。
如果您在操作类中只有一个操作从提交的表单中填充属性,您可以通过 OGNL 将输入控件绑定(bind)到操作类属性。
<s:form action="login" method="post">
<table>
<tr>
<td>User name:<s:textfield name="logon.userName" />
<tr>
<td><s:submit type="button" value="submit" label="Submit" /></td>
</tr>
</table>
这里,logon.userName
是 OGNL 表达式,计算结果以呈现文本字段的 value
。除非您明确指定 value
属性,否则将调用表达式。
它在操作实例上调用 getLogon().getUserName()
。由于在执行结果之前没有初始化 logon
属性,因此它会抛出另一个 NullPointerException
但它在内部被捕获并被忽略。在这种情况下,texttfield 标记不呈现任何内容。你可能会觉得它有效!?
因为当您提交表单时,它使用来自文本字段的 name
属性的值并将其作为请求参数传递。然后此参数名称会针对 OGNL 进行解析。它是相同的 OGNL 表达式 logon.userName
,但 Struts 将在操作实例上使用 getLogon().setUserName()
来设置参数的值。
为什么它不抛出异常的合理问题,即为什么调用 getLogon()
返回一个 Logon
实例?这就是 Struts2 的魔力。它可以处理调用 getLogon()
和 setUserName()
之间的 null
值。默认情况下,如果尚未创建对象,它会创建一个对象。您可以使用 struts.xml
中的常量来控制此行为。
但是,在我看来,您应该自己创建它,或者使用具有 DI 的容器创建它,它提供像 Spring 这样的 beans 配置。
private Logon logon = new Logon();
Struts2 主要用于将许多 Action 映射到同一个 Action 类,而不仅仅是映射到execute
方法。因此,初始化一个 bean 将安全地避免在调用操作时在内部或外部重现的错误。
关于java - Struts2 Action类验证方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36345987/
当包裹在 EmberJS Controller 的 actions 中时,如何从另一个 Action 调用一个 Action ? 使用现已弃用的方式定义操作的原始代码: //app.js App.In
我有一个 Action (一个yaml文件),用于将docker镜像部署到Google Cloud Run。 我希望收到通知构建和推送结果的Slack或电子邮件。 构建操作完成后,如何触发消息操作?
Selenium 的 actions 类中存在的 tick(Action action) 和 tick(Interaction...actions) 方法的用途是什么? 是否与点击任何 webElem
简短的背景故事 我们目前为数百名用户提供对话操作。我们在过去三年中为我们的一位客户开发了这个 Action 作为“工作”。正如我们最近发现的那样,我们会受到对话行为的影响。 当然,我们现在正在研究如何
考虑系统用户可以并发方式执行两个操作,第一个操作 (A1) 仅对用户的订单执行,第二个操作 (A2) 包括在执行时执行 (A1),如下面的使用所述-案例图..((考虑A1完全执行U1,A2完全执行U2
我正在为 android 中的 ActionBar 而苦苦挣扎。 这是我的问题:我的操作项没有显示在操作栏中,而是堆叠在操作溢出中,无论我做什么.. 我花了一天的时间寻找解决方案,但我似乎找不到缺少的
我正在构建一个工作流,其中一个操作为工作流中的一个步骤提供条件。我该如何使用这个值? 该操作的值为空,因此计算结果为 false,并且从未部署过任何内容... jobs: build: s
鉴于您有一些全局 View (例如,显示加载屏幕),您可能希望在许多情况下发生这种情况,为该行为创建一个 Action 创建者/ Action 对还是为相关 Action 创建 reducer 更合适
我有一个使用 DialogFlow 构建的 Actions on Google 代理,其中包含多个操作(例如 actions.intent.MAIN 和 get_day_of_week)。 当我在 3
是否可以从我的 action.yml 文件中引用另一个 GitHub 操作? 请注意,我在这里谈论的是操作,而不是工作流程。我知道这可以通过工作流来完成,但是操作可以引用其他操作吗? 最佳答案 答案似
在 Vuex 操作中,我们有以下实现。 async actionA({ commit, dispatch }) { const data = this.$axios.$get(`/apiUrl`)
我正在将我的应用程序服务器从 Jboss 4.2 迁移到 7.1。我在 Struts 配置中收到以下错误。 struts.xml 中定义的 Action 被调用,而 Action 包中的操作未被调用。
我向 ActLand 发送请求,然后 intercept(),如果没有登录则重定向到 Login.jsp。 struts.xml:
我有一个 Action 创建器,它接受一个 id 和一个回调函数。它向服务器发送请求以执行某些操作并返回一个虚拟操作。我在这里想做的就是调用回调函数并退出,因为该虚拟操作对我来说没有用处,例如喜欢帖子
我已经使用 Html.Action 方法调用了另一个 View 。当用户单击操作链接时,我想在 subview 内使用参数调用相同的操作。 当我写这段代码时,我得到了这个错误信息: Html.Acti
是 public event Action delt = () => { Console.WriteLine("Information"); }; 的重载版本 Action delg = (a, b)
countresultsfrom.addActionListener(new ActionListener() { public void actionPerforme
我刚刚看到一个 brand-new video在 Rx 框架上,一个特别的签名引起了我的注意: Scheduler.schedule(this IScheduler, Action) 在 23:55,
我创建了一个在我的开发者帐户中完美运行的 DialogFlow 应用程序。 但我需要以另一个用户的身份对其进行测试,因此在我的 Google Action 模拟器中,我添加了另一个测试帐户作为项目的所
我正在尝试实现消息存储拦截器以在我的 JSp 上显示 ActionMessage,但无法访问 ActionMessage。有人可以提供一个链接如何实现消息存储拦截器吗? 最佳答案 这是我的一个应用程序
我是一名优秀的程序员,十分优秀!