我想获取我的表单并将其保存在db上。 我在我的表单中得到了嵌套对象,因此我创建了一个自定义格式化程序,但它似乎永远不会被调用。
我的JSP:
<form:form method="POST" modelAttribute="user" action="administration-utilisateurs">
<div class="row">
<%-- User CUID --%>
<div class="large-2 columns">
<label><spring:message code="cuid.lbl"/>
<form:input path="cuid" type="text" readonly="true"/>
</label>
</div>
<%-- User Surname and FirstName --%>
<div class="large-6 columns">
<label><spring:message code="surname"/> et <spring:message code="firstname"/>
<form:input path="name" type="text" readonly="true"/>
<form:input path="email" type="text" readonly="true"/>
</label>
</div>
<%-- Default Application --%>
<div class="large-4 columns end">
<label>Application par défaut
<form:select path="applicationDefault">
<form:options items="${applications}" itemValue="id" itemLabel="name"/>
</form:select>
</label>
</div>
</div>
<br>
<div class="row">
<div class="large-offset-4 large-4 columns">
<input type="submit" class="button" value="<spring:message code="register"/>" />
</div>
</div>
</form:form>
我的控制器:
@Controller
public class administrationUserController
{
/* Debug */
private final static Logger logger = LoggerFactory.getLogger(ApplicationServiceImpl.class);
@Resource
IApplicationService applicationService;
/*
###############################
# #
# GET #
# #
###############################
*/
@RequestMapping(value="/administration-utilisateurs", method=RequestMethod.GET)
public String setForm(ModelMap model)
{
User user = new User();
Ldap ldap = new Ldap();
/* Get applications from database */
model.addAttribute("applications", applicationService.findAll());
logger.debug("application list " + model.get("applications"));
/* Get user informations with LDAP */
user = ldap.chercheRessourceCUID("IMSY7472");
model.addAttribute("user", user);
return "administrationUser";
}
/*
###############################
# #
# POST #
# #
###############################
*/
@Autowired
private IApplicationService applicationServices;
@RequestMapping(value = "/administration-utilisateurs", method = RequestMethod.POST)
public String getForm(@ModelAttribute(value = "user") User userTemp,
BindingResult result, ModelMap model) {
User userData = new User();
Ldap ldap = new Ldap();
logger.debug("Nom : " + userTemp.getName()
+ ", Prénom : "+ userTemp.getFirstName()
+ ", CUID : " + userTemp.getCuid()
+ ", Email : " + userTemp.getEmail()
+ ", Appli : " + userTemp.getApplicationDefault());
logger.debug("Call LDAP");
userTemp.setApplicationDefault((Application) model
.get("applicationList"));
logger.debug("New rechearch on LDAP");
userData = ldap.chercheRessourceCUID(userTemp.getCuid());
logger.debug("Set application defautlt");
userData.setApplicationDefault(userTemp.getApplicationDefault());
logger.debug("Nom : " + userData.getName() + ", Prénom : "
+ userData.getFirstName() + ", CUID : " + userData.getCuid()
+ ", Email : " + userData.getEmail() + ", Appli : "
+ userData.getApplicationDefault());
return "administrationUser";
}
}
我的自定义格式化程序:
@Component
public final class ApplicationFormatter implements Formatter<Application> {
/* Debug */
private final static Logger logger = LoggerFactory.getLogger(IApplicationService.class);
@Autowired
private IApplicationService applicationServices;
@Override
public String print(Application application, Locale arg1) {
logger.debug("Dans PRINT application formatter");
return application.getName().toString();
}
@Override
public Application parse(String id, Locale arg1)
throws PersistenceException,ParseException, IllegalArgumentException {
logger.debug("Dans PARSE application formatter");
return applicationServices.getApplication(Long.parseLong(id));
// Else you can just return a new object by setting some values
// which you deem fit.
}
}
我的申请背景:
<!-- We use annotation in form -->
<mvc:annotation-driven conversion-service="conversionService"/>
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="formatters">
<set>
<!-- <ref bean="applicationFormatter"/> -->
<bean class="com.orange.OSAC.tools.ApplicationFormatter" />
</set>
</property>
</bean>
输出
15:07:31.917 [http-nio-8080-exec-9] DEBUG c.o.O.s.ApplicationServiceImpl - Nom : Sarrat, Prénom : null, CUID : IMSY7472, Email : marc.sarrat@orange.com, Appli : null
15:07:31.918 [http-nio-8080-exec-9] DEBUG c.o.O.s.ApplicationServiceImpl - Call LDAP
15:07:31.918 [http-nio-8080-exec-9] DEBUG c.o.O.s.ApplicationServiceImpl - New rechearch on LDAP
15:07:31.953 [http-nio-8080-exec-9] DEBUG c.o.O.s.ApplicationServiceImpl - Set application defautlt
15:07:31.953 [http-nio-8080-exec-9] DEBUG c.o.O.s.ApplicationServiceImpl - Nom : Sarrat, Prénom : Marc, CUID : IMSY7472, Email : marc.sarrat@orange.com, Appli : null
我认为我的自定义格式化程序存在问题,因为控制台中没有调试..所以我猜我的方法没有被调用。
我尝试了3天仍然没有工作。有人能帮助我吗?
ps:对不起我的英文:/