play framework: http requests : server : get(),post(),put() - 无法理解它是如何工作的
play framework: http requests : server : get(),post(),put() - can't understand how it works
太棒了,我环顾四周并试图了解 'http' 请求是如何工作的...我尝试了一些方法,但我失败了 'with flying colors'(好的,很抱歉).
我想我在理解一切如何运作时遇到问题....
例如...我有这个注册表:
@(page: String, isLoggedIn: Boolean, userInfo: NewUser)
@import bootstrap3._
@Main(page, isLoggedIn, userInfo) {
<script src='@routes.Assets.at("javascript/index.js")'></script>
<br><br><br>
<br>
<form action="@routes.Application.addUser()" method="POST">
<div class="col-md-offset-1 col-md-4">
<h3><b>Register : </b></h3>
<br>
Username :
<input type="input" name="username" class="form-control"><br>
First Name :
<input type="input" name="first_name" class="form-control"><br>
Last Name :
<input type="input" name="last_name" class="form-control"><br>
Password:
<input type="password" name="password" class="form-control"><br>
Repeat Password :
<input type="password" name="re_password" class="form-control"><br>
<input type="submit" class="btn">
</div>
</form>
}
使用此模型:
...
public class NewUser extends Model{
@Id
public String Id;
public String username;
public String first_name;
public String last_name;
public String password;
public String re_password;
+getters and setters
}
我想创建一种方法,使用我的服务器将用户添加到我的数据库中...
public static Result addUser(){
String url = "http://localhost/my-server-url";
NewUser user = Form.form(NewUser.class).bindFromRequest().get();
// ? String charset = "ISO-8859-1";
// ? WSRequest wsRequest = WS.url(url);
// ? HttpResponse wsResponse = wsRequest.post();
// ? String responseString = wsResponse.getString(charset);
}
************ 现在怎么办……!? - 服务器如何知道如何填充我的数据库? (我认为 url 在这里有帮助......注册表单应该具有与我的数据库相同的结构?)
********* 或者我怎样才能告诉他从列表中的数据库中给我一些东西(例如)?
谁能解释一下这一切是如何运作的!?
非常感谢...
How does the server know how to fill my database?the register form should have
the same structure like my DB?
Play 包含几种不同的 bind()
方法。其中一些支持 JSON 或请求值,其他 Map<String, String[]>
个实例。它们都在内部指向 public Form<T> bind(Map<String,String> data, String... allowedFields)
方法。正如这个方法的名字所暗示的那样,它负责处理提交的数据。这意味着在这个方法里面我们可以找到一个片段:
接收数据规范化(将无序数据转换为解释对象,在本例中为 DataBinder 实例):
DataBinder dataBinder = null;
Map<String, String> objectData = data;
if(rootName == null) {
dataBinder = new DataBinder(blankInstance());
} else {
dataBinder = new DataBinder(blankInstance(), rootName);
objectData = new HashMap<String,String>();
for(String key: data.keySet()) {
if(key.startsWith(rootName + ".")) {
objectData.put(key.substring(rootName.length() + 1), data.get(key));
}
}
}
所以行
Form.form(NewUser.class).bindFromRequest()
在您的控制器中创建一个 NewUser
类型的表单对象并将请求内部映射到 NewUser
对象字段,如上所示 code.So 表单字段名称应与您的实体字段名称,以便持久保存在数据库中。
And what now ... !?
现在做了之后
NewUser user = Form.form(NewUser.class).bindFromRequest().get();
在你的控制器中你必须通过做
来阻止这个实体
user.save();
它会被保存在database.You也可以将这个对象发送给你模型调用那里的保存方法。
How can i tell him to give me back something from the data base in a
list (for example)?
假设你必须找到所有保存在数据库中的新用户。所以你可以通过
获取列表
public static Finder<Integer, Member> find = new Finder(Integer.class, NewUser.class);
public static List<NewUser> all(){
return find.all();
}
在您的模型中 class 并在您的控制器中调用此 all()
方法。
您随时可以从您下载的文件夹中提供的游戏 samples 中获得帮助。
注意:我在这里假设您使用的是默认的游戏规则,即 ebean
太棒了,我环顾四周并试图了解 'http' 请求是如何工作的...我尝试了一些方法,但我失败了 'with flying colors'(好的,很抱歉). 我想我在理解一切如何运作时遇到问题....
例如...我有这个注册表:
@(page: String, isLoggedIn: Boolean, userInfo: NewUser)
@import bootstrap3._
@Main(page, isLoggedIn, userInfo) {
<script src='@routes.Assets.at("javascript/index.js")'></script>
<br><br><br>
<br>
<form action="@routes.Application.addUser()" method="POST">
<div class="col-md-offset-1 col-md-4">
<h3><b>Register : </b></h3>
<br>
Username :
<input type="input" name="username" class="form-control"><br>
First Name :
<input type="input" name="first_name" class="form-control"><br>
Last Name :
<input type="input" name="last_name" class="form-control"><br>
Password:
<input type="password" name="password" class="form-control"><br>
Repeat Password :
<input type="password" name="re_password" class="form-control"><br>
<input type="submit" class="btn">
</div>
</form>
}
使用此模型:
...
public class NewUser extends Model{
@Id
public String Id;
public String username;
public String first_name;
public String last_name;
public String password;
public String re_password;
+getters and setters
}
我想创建一种方法,使用我的服务器将用户添加到我的数据库中...
public static Result addUser(){
String url = "http://localhost/my-server-url";
NewUser user = Form.form(NewUser.class).bindFromRequest().get();
// ? String charset = "ISO-8859-1";
// ? WSRequest wsRequest = WS.url(url);
// ? HttpResponse wsResponse = wsRequest.post();
// ? String responseString = wsResponse.getString(charset);
}
************ 现在怎么办……!? - 服务器如何知道如何填充我的数据库? (我认为 url 在这里有帮助......注册表单应该具有与我的数据库相同的结构?) ********* 或者我怎样才能告诉他从列表中的数据库中给我一些东西(例如)?
谁能解释一下这一切是如何运作的!? 非常感谢...
How does the server know how to fill my database?the register form should have the same structure like my DB?
Play 包含几种不同的 bind()
方法。其中一些支持 JSON 或请求值,其他 Map<String, String[]>
个实例。它们都在内部指向 public Form<T> bind(Map<String,String> data, String... allowedFields)
方法。正如这个方法的名字所暗示的那样,它负责处理提交的数据。这意味着在这个方法里面我们可以找到一个片段:
接收数据规范化(将无序数据转换为解释对象,在本例中为 DataBinder 实例):
DataBinder dataBinder = null;
Map<String, String> objectData = data;
if(rootName == null) {
dataBinder = new DataBinder(blankInstance());
} else {
dataBinder = new DataBinder(blankInstance(), rootName);
objectData = new HashMap<String,String>();
for(String key: data.keySet()) {
if(key.startsWith(rootName + ".")) {
objectData.put(key.substring(rootName.length() + 1), data.get(key));
}
}
}
所以行
Form.form(NewUser.class).bindFromRequest()
在您的控制器中创建一个 NewUser
类型的表单对象并将请求内部映射到 NewUser
对象字段,如上所示 code.So 表单字段名称应与您的实体字段名称,以便持久保存在数据库中。
And what now ... !?
现在做了之后
NewUser user = Form.form(NewUser.class).bindFromRequest().get();
在你的控制器中你必须通过做
来阻止这个实体user.save();
它会被保存在database.You也可以将这个对象发送给你模型调用那里的保存方法。
How can i tell him to give me back something from the data base in a list (for example)?
假设你必须找到所有保存在数据库中的新用户。所以你可以通过
获取列表public static Finder<Integer, Member> find = new Finder(Integer.class, NewUser.class);
public static List<NewUser> all(){
return find.all();
}
在您的模型中 class 并在您的控制器中调用此 all()
方法。
您随时可以从您下载的文件夹中提供的游戏 samples 中获得帮助。
注意:我在这里假设您使用的是默认的游戏规则,即 ebean