我在Liferay Portal环境中使用了Struts portlet.到目前为止,我一直在使用标准资源文件本地化我的资源字符串.我可以使用<bean:message>标签从我的portlet访问消息包,它工作得很好.因此,例如,在一个表单中,我可能在我的JSP文件中定义了以下标签.
...
<label for="firstname">
<bean:message key='labels.firstname'/>
</label>
...
Run Code Online (Sandbox Code Playgroud)
这适用于在编译时间后不会更改的短字符串.我可以正确地本地化我的字符串,编译我的portlet,它只是工作.
问题:我需要允许门户内容作者在编译后即时修改我的portlet中使用的内容.我的第一个想法是使用Liferay的Web内容系统,因此内容作者可以创建我可以从我的portlet的JSP文件访问的本地化Web内容片段.
问题:是否可以从我的portlet中访问Liferay Web内容?
我正在研究J2EE Web应用程序
这里我们使用JSP和Struts
我知道可以使用
客户端验证(使用JavaScript)
服务器端验证(使用验证框架)
我的问题是哪种方式更合适,应该在应用中使用,为什么?
Struts - <html:errors />在Jsp中显示错误消息的替代方法?
大多数Web框架仍在使用传统的基于动作的MVC模型.控制器接收请求,调用模型并将呈现委托给模板.这就是Rails,Grails,Struts,Spring MVC ......正在做的事情.
另一类,基于组件的框架,如Wicket,Tapestry,JSF或ASP.Net Web Forms在过去几年中变得越来越流行,但我认为传统的基于行为的方法更受欢迎.甚至ASP .Net Web Forms也已成为ASP .Net Web MVC的兄弟.编辑:也许我的看法是错误的,因为人们对Wicket越来越感兴趣.如果我问谷歌趋势,传统的MVC框架会有更多的增长.
我认为使用这两种类型的框架构建的应用程序的类型非常重叠,因此问题是:为什么基于行为的框架如此占主导地位?
model-view-controller asp.net-mvc struts wicket web-frameworks
如何通过Struts打开另一个jsp?
例如,
我有2个JSP,Page1.jsp和Page2.jsp.
Page1.jsp 不包含任何表单.
Page2.jsp 包含一个表单.
我需要一个关于Page1.jsp的链接,当点击它时会将我带到Page2.jsp.
什么是需要添加到struts-config.xml的Actionmappings?
我尝试在Page1.jsp中添加这些行
Run Code Online (Sandbox Code Playgroud)<html:link page="Page2.do">Page2</html:link> <a href="Page2.do">Page2</a>
在struts-config.xml中,执行以下Action-mapping
Run Code Online (Sandbox Code Playgroud)<action path="/Page2" parameter="Page2.jsp" type="org.apache.struts.actions.ForwardAction"/>
在"HREF"作品之一,而一个以"HTML:链接"不带我去Page2.jsp.
这是为什么?
因此,我有一个通用的Form Bean,它具有一些值,例如action,offer和code。
我正在开发使用此通用表单(必填)的新表单,但我想使用名称与从中获取值的bean不同的bean的值来填充表单页面。
在页面的第一次加载中,它显示一些基本数据:
Action: (hidden input, name the same as the bean)
<html:hidden property="action"/>
Offer: (user input, name the same as the bean)
<html:text property="offer"/>
Code: (hidden input, name not the same as the bean)
<html:hidden property="code"/>
Run Code Online (Sandbox Code Playgroud)
我要使用的bean是这样的:
<bean:write name="data" property="data.code.description"/>
Run Code Online (Sandbox Code Playgroud)
如何将该值(data.code.desription)放入“隐藏”代码区域,以便在提交表单时,通用表单bean可以获取该值?
有时,我的struts 2应用程序中会抛出此异常.我想要的时候无法复制它,它只是随机弹出.
Struts has detected an unhandled exception:
Messages:
Action has already executed
File: com/opensymphony/xwork2/DefaultActionInvocation.java
Line number: 240
Stacktraces
java.lang.IllegalStateException: Action has already executed
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:240)
xxx.yyy.zzz.qqq.ddd.interceptors.AuthInterceptor.invoke(AuthInterceptor.java:68)
xxx.yyy.zzz.qqq.ddd.interceptors.AuthCCareInterceptor.checkAuthenticateInvoke(AuthCCareInterceptor.java:142)
xxx.yyy.zzz.qqq.ddd.interceptors.AuthInterceptor.intercept(AuthInterceptor.java:59)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:498)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
java.lang.Thread.run(Thread.java:722)
Run Code Online (Sandbox Code Playgroud)
对不起"xxx.yyy.zzz.qqq.ddd",但这是机密信息.我相信你明白了!
谢谢 :-)
例如,我们有下一堆:Struts,Spring,Hibernate.你能帮我理解每个元素所起的作用吗?
我知道这Hibernate对数据库的所有人负责.
但是,什么样的作用Struts,并Spring在这种情况下?
谢谢.
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
当我为我的项目选择struts框架时,我的IDE会自动生成上面的代码.我没有看到任何名为action的 servlet .请解释这个xml的含义是什么?
编辑:
我读过ActionServlet已经配置了struts-config.xml文件.它是如何配置的?
<struts-config>
<form-beans>
<form-bean name="HelloWorldActionForm"
type="com.vaannila.HelloWorldActionForm"/>
<action-mappings>
<action input="/index.jsp" name="HelloWorldActionForm" path="/HelloWorld" scope="session" type="com.vaannila.HelloWorldAction">
<forward name="success" path="/helloWorld.jsp" />
</action>
</action-mappings>
Run Code Online (Sandbox Code Playgroud) 我尝试这样做,但它不起作用.
<logic:present name="MEMBER" >
<bean:message key="member.registerConfirmation" arg0='<bean:write name="MEMBRE_REGISTER" property="firstname"/>' arg1='<bean:write name="MEMBRE_REGISTER" property="lastname"/>'/>
</logic:present>
Run Code Online (Sandbox Code Playgroud)
和bean:消息包含:
member.registerConfirmation = Congratulations {0} {1}, you are in !
Run Code Online (Sandbox Code Playgroud)