Salve a tutti.
Mi sto appena addentrando nella programmazione server-side con Java EE e sto iniziando ad usare il framework Struts2.
Sul libro dal quale sto studiando (Learn Java for Web Development di Layka) c'è scritto che è possibile evitare di usare le annotazioni e la mappatura azione-risultato tramite struts.xml semplicemente usando il plug-in convention di struts e seguendo le sue convenzioni.
Ebbene, questo è il mio progetto:
web.xml
codice:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="struts_blank" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Struts Blank</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
struts.xml
codice:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
<constant name="struts.devMode" value="true"/>
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index"/>
<action name="index">
<result>/index.html</result>
</action>
</package>
<!-- Add addition packages and configuration here. -->
</struts>
index.html (in webapp)
codice:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head></head>
<body>
<form action="hello-world">
<label for="name">Enter your name:</label>
<input type="text" name="name" />
<input type="submit" />
</form>
</body>
</html>
hello-world.jsp (in WEB-INF/content)
codice:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%><%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Hello</title>
</head>
<body>
Welcome <s:property value="name" />
</body>
</html>
HelloWorldAction.java
codice:
package com.apress.helloworld.action;
import com.opensymphony.xwork2.Action;
public class HelloWorldAction implements Action{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String execute() throws Exception {
return SUCCESS;
}
}
Mandando in esecuzione il progetto su Tomcat 8.0.23 tramite Eclipse Luna SR2 ottengo il seguente errore:
codice:
Unexpected Exception caught setting 'name' on 'class com.opensymphony.xwork2.ActionSupport: Error setting expression 'name' with value ['Un nome a caso', ]
Se però mappo la action tramite struts.xml o annotazioni tutto funziona a dovere.
Cosa può essere e come posso risolverlo?
Grazie mille per la disponibilità.