我使用spring + struts2,我有大量需要单个服务(mailService)的动作类.我想知道有没有办法创建父类并注入资源,然后让所有这些类扩展父类,而不是将服务注入这些操作类.所以我不需要在每节课中重复注射.
提前致谢
我是一个网络系统,无法决定使用什么技术!Struts2和JSF(带jboss接缝)是一个不错的选择,但我无法决定哪个更好.在JSF中有一些我不喜欢的,也许它的"范式"没有动作就好.而Struts2,这里的人们不会使用更多.
该系统是地图协作网站.
这看起来应该很容易,但我可以让它工作.我迷上了Struts 2.1中的约定插件.但是,我需要定义一些包级配置,例如新的拦截器堆栈和异常映射.我想为此使用struts.xml文件,但我无法获得与struts.xml包匹配的基于约定的包.我的struts.xml看起来像:
<struts>
<constant name="struts.convention.default.parent.package" value="default"/>
<package name="default" extends="struts-default">
</package>
<package name="root" namespace="/" extends="struts-default">
<action name="index">
<result>/index.jsp</result>
</action>
</package>
<package name="my.package.actions.myaccount" namespace="/myaccount" extends="struts-default">
<interceptors>
<interceptor name="authenticationInterceptor" class="my.package.interceptors.AuthenticationInterceptor"/>
<interceptor-stack name="secureStack">
<interceptor-ref name="authenticationInterceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="secureStack"/>
</package>
</struts>
Run Code Online (Sandbox Code Playgroud)
我的拦截器位于:
/src/my/package/interceptors
,我的操作位于:
/src/my/package/actions/myaccount
我把println()每个方法都放在Action类中.
public String execute() throws Exception {
System.out.println("execute");
//...
}
public void prepare() throws Exception {
System.out.println("prepare");
//...
}
public Object getModel() {
System.out.print("getModel");
//...
}
Run Code Online (Sandbox Code Playgroud)
我以为订单会是; 准备→执行→getModel.
因为我记得我在书中读过它,所以我习惯构造bean类并做一些逻辑prepare(),然后返回SUCCESS execute().我认为getModel用于将bean推送到valueStack,对吧?
......无论如何,控制台告诉我这个.这很奇怪; 准备→getModel→执行.
这对我来说是一个巨大的问题.用英语解释原因很难......但我会试试!
我曾经创建过处理相同bean的每个动作类,当然每个动作类中都有相同的代码(变量,它们的getter和setter).
现在我正在尝试创建一个操作来避免重复.这个动作类有几个方法(像这样在struts.xml中映射; <action name="View_board" method="view">).
正如我们在控制台中看到的那样,view()在动作类的最后一个调用它execute().该prepare()不会只是构建豆和view()做真正的就业机会.但是getModel()在调用之前调用view(),所以没有机会将bean放到ValueStack.
我希望你们明白我要解释的是什么.
总结一下,每个动作类都像BoardView,BoardDelete,BoardWrite ......它们运作良好!但我讨厌那些重复的东西,所以我创建了BoardManager类.这个类有每个方法(比如view())由类处理(比如BoardView).但是这个view()是在调用之后调用的getModel(),所以bean(return of getModel())没有机会被推送到ValueStack.
请帮帮我.教我你在这个领域的专业知识.我正在自己开发这一切,这让我感觉很难受.
谢谢!!
我希望在点击html页面中的html链接时执行Struts2操作.我的第一个问题是,是否可以在html页面(而不是JSP)中执行Struts2操作?如果是,请查看下面的代码:
home.html的
HREF = "home.action"
在struts.xml
action name ="home"class ="com.struts.action.HomeAction"
Run Code Online (Sandbox Code Playgroud)result name="Success">loginJSP.jsp
*****web.xml*****我做了过滤映射,以便所有内容都转到Struts2
我正在尝试学习struts2,所以这是一个非常基本的问题.
我有一个页面input_database.jsp,以及它对应的类input_database.java
在类文件中,我有一个带有mutator和accessor的字符串的arraylist.我想在我的.jsp文件中显示它
我一直试图用a来做,但我认为我做的事情从根本上是错误的.
这是我一直试图在jsp文件中使用的代码.arraylist是一个名为query_data的私有字符串列表.我的最终目标是显示一个字符串arraylists的arraylist来显示我的select语句,但我需要先找出一些简单的字符串.如果有人知道我做错了什么,或者可以指出一个我忽略的教程,那就太棒了
谢谢
<s:iterator value="query_data" id="something">
<s:property value="something"/><br />
</s:iterator>
Run Code Online (Sandbox Code Playgroud) 美好的一天!
我创建了重载构造函数如下:
public ContactsBean(String firstName, String lastName,
String telNumber, String email) {
this.id = count;
count = count + 1;
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.telNumber = telNumber;
}
public ContactsBean() {
this.id = count;
count = count + 1;
}
Run Code Online (Sandbox Code Playgroud)
我想自动增加id所以我使用了这个变量:
private static int count;
private int id;
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我实例化时ContactsBean() contacts = new ContactsBean(),id的值增加2 .. 2,4,6,8 ...等.
为什么?如何将ID增量的自动编号设为1?
谢谢.
编辑:
行动:
private ContactsBean contacts = new ContactsBean();
private ContactsManager contactsManager = new ContactsManager();
public …Run Code Online (Sandbox Code Playgroud) 我是Struts 2的新手,之前曾在Struts 1工作。
我们如何将错误消息与UI组件(例如,文本框)绑定在一起?我不希望该错误消息成为全局消息。
为了在Struts 1中实现相同效果:
在表单验证方法中,我使用了以下方法:
ActionErrors errors = new ActionErrors();
if(userName != null && userName.length() <= 0)
errors.add("userName",new ActionError("error.userName.required"));
Run Code Online (Sandbox Code Playgroud)
并在用户界面中显示消息:
<html:messages id="userName" property="userName">
<bean:write name="userName"/>
</html:messages>
Run Code Online (Sandbox Code Playgroud)
在Struts 2中,如果我扩展Action类ActionSupport并使用它:
addActionError(getText("Please enter UserId"));
Run Code Online (Sandbox Code Playgroud)
然后,这似乎是一条全局消息,可以使用以下命令在UI中显示:
<s:actionerror />
Run Code Online (Sandbox Code Playgroud)
因此,不确定如何在Struts 2中实现相同的功能。请让我知道这一点。
我有两个选择这样:
<s:select label = "Pays " list="payss" key="pays" value="%{FRANCE}"></s:select>
<s:select label = "Categorie " list="categories" key="categorie" value="%{200}">/s:select>
Run Code Online (Sandbox Code Playgroud)
第二个默认值有效,但第一个不是,列表是这样的:
payss:
categories:
我将尝试在iReport中创建我的PIE 3D报告,在我的struts.xml中,我可以用它来调用我的报告。
<action name="cargaReporte"
class="com.techera.eventos.action.MisVisitasAction"
method="cargaReporte">
<result name="success" type="jasper">
<param name="location">/WEB-INF/jsp/reportes/reporteMisVisitas.jasper</param>
<param name="dataSource">visitas</param>
<param name="format">PDF</param>
</result>
</action>
Run Code Online (Sandbox Code Playgroud)
在我的jsp中我得到了
<a href="cargaReporte">Reporte</a>
Run Code Online (Sandbox Code Playgroud)
当我单击链接时,错误是这样的
java.lang.ClassNotFoundException: net.sf.jasperreports.compilers.GroovyEvaluator
at java.lang.ClassLoader.findClass(ClassLoader.java:522)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
...
Run Code Online (Sandbox Code Playgroud)
有人告诉我我该怎么办?
我使用这些库:
groovy-all-1.7.5.jar
struts2 ×10
java ×6
struts ×3
java-ee ×2
choice ×1
constructor ×1
convention ×1
eclipse-juno ×1
html ×1
ireport ×1
jsf ×1
jsp ×1
model-driven ×1
ognl ×1
spring ×1
web ×1