Ich habe gerade angefangen, mit Django zu arbeiten, der aus den Jahren von Spring MVC stammt, und die Implementierung der Formulare scheint etwas verrückt zu sein. Wenn Sie nicht vertraut sind, beginnt Django Forms mit einer Formularmodellklasse, die Ihre Felder definiert. Der Frühling beginnt in ähnlicher Weise mit einem Formträger. Wo Spring jedoch eine Taglib zum Binden von Formularelementen an das Hintergrundobjekt in Ihrer JSP bereitstellt , sind in Django Formular-Widgets direkt mit dem Modell verknüpft. Es gibt Standardwidgets, mit denen Sie Ihren Feldern Stilattribute hinzufügen können, um CSS anzuwenden, oder vollständig benutzerdefinierte Widgets als neue Klassen definieren können. Es geht alles in Ihrem Python-Code. Das kommt mir verrückt vor. Erstens fügen Sie Informationen zu Ihrer Ansicht direkt in Ihr Modell ein und zweitens binden Sie Ihr Modell an eine bestimmte Ansicht. Vermisse ich etwas?
EDIT: Ein Beispielcode wie gewünscht.
Django:
# Class defines the data associated with this form
class CommentForm(forms.Form):
# name is CharField and the argument tells Django to use a <input type="text">
# and add the CSS class "special" as an attribute. The kind of thing that should
# go in a template
name = forms.CharField(
widget=forms.TextInput(attrs={'class':'special'}))
url = forms.URLField()
# Again, comment is <input type="text" size="40" /> even though input box size
# is a visual design constraint and not tied to the data model
comment = forms.CharField(
widget=forms.TextInput(attrs={'size':'40'}))
Spring MVC:
public class User {
// Form class in this case is a POJO, passed to the template in the controller
private String firstName;
private String lastName;
get/setWhatever() {}
}
<!-- JSP code references an instance of type User with custom tags -->
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!-- "user" is the name assigned to a User instance -->
<form:form commandName="user">
<table>
<tr>
<td>First Name:</td>
<!-- "path" attribute sets the name field and binds to object on backend -->
<td><form:input path="firstName" class="special" /></td>
</tr>
<tr>
<td>Last Name:</td>
<td><form:input path="lastName" size="40" /></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Save Changes" />
</td>
</tr>
</table>
</form:form>