ZK通过javascript设置服务器值
我用canvas/javascript绘制了一个dartbard,并计算出哪个值字段被javascript命中 问题出在这里: 我可以从客户端更新文本框/标签中的值,但我无法让服务器注册有更改/意识到值已更改 我很确定这是一个简单的问题,但如果你能帮助我,那就太好了 这就是我被困在细节中的一点: 1)我点击画布,一个字段被点击。已设置命中字段值 =>这不应该触发hitText的Set方法吗ZK通过javascript设置服务器值,java,javascript,client-server,return-value,Java,Javascript,Client Server,Return Value,我用canvas/javascript绘制了一个dartbard,并计算出哪个值字段被javascript命中 问题出在这里: 我可以从客户端更新文本框/标签中的值,但我无法让服务器注册有更改/意识到值已更改 我很确定这是一个简单的问题,但如果你能帮助我,那就太好了 这就是我被困在细节中的一点: 1)我点击画布,一个字段被点击。已设置命中字段值 =>这不应该触发hitText的Set方法吗 <label id="hiddenValue" value="@bind(vm.hitTex
<label id="hiddenValue" value="@bind(vm.hitText)" visible="true" />
<canvas id="canvas" onclick="calc()"></canvas>
<script type="text/JavaScript">
<![CDATA[
function calc() {
var valuey= calcResult();zk.Widget.$(jq('$hiddenValue')[0]).setValue(valuey);
};
]]>
</script>
----------------------------
完整的Zul文件:
<zk>
<window title="The Dart Scorer" border="normal"
apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('de.itsmeagain.controller.dartViewModel')"
xmlns:w="http://www.zkoss.org/2005/zk/client">
<tabbox id="tabbox">
<tabs>
<tab label="New Game" />
<tab label="Players" />
<tab label="Lets Dart!" selected="true" />
<tab label="Player Statistics" />
</tabs>
<tabpanels>
<tabpanel>
<vbox>
<hbox>
<label id="l_gametype" value="Select Game Type:" />
<combobox id="gametype" width="150px">
<attribute name="onCreate">
<![CDATA[
List list2 = new ArrayList();
list2.add("501");
list2.add("301");
list2.add("Cricket");
list2.add("Halve It");
ListModelList lm2 = new ListModelList(list2);
lm2.addSelection(lm2.get(0));
gametype.setModel(lm2);
]]></attribute>
</combobox>
</hbox>
<button id="b_players" label="Select Players"
onclick="@command('SwitchTab',Index=1)" />
<button id="b_newGame" label="Start New Game" />
</vbox>
</tabpanel>
<tabpanel>
<vbox>
<listbox id="playerlist" model="@load(vm.players)"
selectedItem="@laod(vm.singleplayer)" width="100%" emptyMessage="Nothing Here!">
<listhead>
<listheader label="Player ID" sort="auto" width="20%" />
<listheader label="Player Name" sort="auto" width="50%" />
<listheader label="Use Player" sort="auto" width="10%" />
<listheader label="Delete Player" sort="auto" width="20%" />
</listhead>
<template name="model">
<listitem>
<listcell label="@load(each.playerID)" />
<listcell label="@load(each.playerName)" />
<listcell>
<checkbox checked="@load(each.active)" />
</listcell>
<listcell>
<button label="delete Player" />
</listcell>
</listitem>
</template>
</listbox>
<hlayout>
<button id="addPlayer" label="add new player" width="100%" />
<button id="startGame" label="StartGame" width="100%" />
</hlayout>
</vbox>
</tabpanel>
<tabpanel>
<vlayout>
<label id="hiddenValue" value="@bind(vm.hitText)" visible="true" />
<html xmlns:w="client"
onClick="@command('processHiData', hit=hiddenValue.getValue())">
<title>Dart</title>
<style>
canvas { background-color: white;
border-style: solid; }
</style>
<canvas id="canvas" onclick="calc()"></canvas>
<body onload="draw();">
</body>
<script type="text/JavaScript">
<![CDATA[
function calc() {
var valuey= calcResult();
zk.Widget.$(jq('$hiddenValue')[0]).setValue(valuey);
};
]]>
</script>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js">
</script>
<script type="text/javascript" src="GlobalVariables.js">
</script>
<script type="text/javascript" src="calculate.js">
</script>
<script type="text/javascript" src="drawObjects.js">
</script>
</html>
</vlayout>
</tabpanel>
</tabpanels>
</tabbox>
</window>
</zk>
飞奔
画布{背景色:白色;
边框样式:实心;}
----------------------
完整的Java类:
package de.itsmeagain.controller;
import java.util.List;
import org.zkoss.bind.annotation.BindingParam;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Label;
import org.zkoss.zul.Textbox;
import de.itsmeagain.db.DartField;
import de.itsmeagain.db.player;
import de.itsmeagain.interfaces.DataBaseService;
import de.itsmeagain.interfaces.DataBaseServiceImpl;
public class dartViewModel extends GenericForwardComposer {
public dartViewModel(){
getInitialDBData();
}
private DataBaseService dbService = new DataBaseServiceImpl();
private List<DartField>dartFields;
private DartField dartfield = new DartField();
private player singleplayer;
private List<player> players;
private player activeplayer;
private List<player> activePlayers;
private String hitText="HitField";
protected Label hiddenValue;
protected Textbox textbox;
public player getSingleplayer() {
return singleplayer;
}
public void setSingleplayer(player singleplayer) {
this.singleplayer = singleplayer;
}
public List<player> getPlayers() {
return players;
}
public player getActivePlayer() {
return activeplayer;
}
public void setActivePlayer(player activePlayer) {
this.activeplayer = activePlayer;
}
public List<player> getActivePlayers() {
return activePlayers;
}
public player getActiveplayer() {
return activeplayer;
}
public void setActiveplayer(player activeplayer) {
this.activeplayer = activeplayer;
}
public DartField getDartfield() {
return dartfield;
}
public void setDartfield(DartField dartfield) {
this.dartfield = dartfield;
}
public List<DartField> getDartFields() {
return dartFields;
}
private void getInitialDBData(){
dartFields=dbService.getDartFields();
players=dbService.getAllPlayer();
activePlayers=dbService.activePlayer();
}
@Command @NotifyChange("hitString")
public void processHiData(@BindingParam("hit") String hit){
System.out.println("you hit " + hit);
}
public String getHitText() {
return hitText;
}
public void setHitText(String hitText) {
this.hitText = hitText;
}
}
package de.itsmeagain.controller;
导入java.util.List;
导入org.zkoss.bind.annotation.BindingParam;
导入org.zkoss.bind.annotation.Command;
导入org.zkoss.bind.annotation.NotifyChange;
导入org.zkoss.zk.ui.util.GenericForwardComposer;
导入org.zkoss.zul.Label;
导入org.zkoss.zul.Textbox;
导入de.itsmeagain.db.DartField;
导入de.itsmeagain.db.player;
导入de.itsmeagain.interfaces.DataBaseService;
导入de.itsmeagain.interfaces.DataBaseServiceImpl;
公共类dartViewModel扩展了GenericForwardComposer{
公共视图模型(){
getInitialDBData();
}
private DataBaseService dbService=new databaseserviceinpl();
私人领域;
private-DartField-DartField=new-DartField();
私人球员单打球员;
私人名单玩家;
私人玩家;
私人球员名单;
私有字符串hitText=“HitField”;
保护标签隐藏值;
受保护的文本框文本框;
公共播放器getSingleplayer(){
返回单打;
}
公共无效设置单玩家(玩家单玩家){
this.singleplayer=singleplayer;
}
公共列表getPlayers(){
返回球员;
}
公共播放器getActivePlayer(){
返回活动玩家;
}
public void setActivePlayer(player-activePlayer){
this.activeplayer=activeplayer;
}
公共列表getActivePlayer(){
返回活跃玩家;
}
公共播放器getActiveplayer(){
返回活动玩家;
}
public void setActiveplayer(player-activeplayer){
this.activeplayer=activeplayer;
}
公共DartField getDartfield(){
返回达特菲尔德;
}
公共无效设置达特菲尔德(达特菲尔德达特菲尔德){
this.dartfield=dartfield;
}
公共列表getDartFields(){
返回达特菲尔德;
}
私有void getInitialDBData(){
dartFields=dbService.getDartFields();
players=dbService.getAllPlayer();
activePlayers=dbService.activePlayer();
}
@命令@NotifyChange(“hitString”)
public void processHiData(@BindingParam(“hit”)字符串命中){
System.out.println(“你命中”+命中);
}
公共字符串getHitText(){
返回文本;
}
公共void setHitText(字符串hitText){
this.hitText=hitText;
}
}
这个问题通过一个简单的post请求得到了解决
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
dartfield.setFieldName(request.getParameter("field"));
dartfield.setFieldModifier(Integer.parseInt((request.getParameter("modi"))));
dartfield.setFieldvalue(Integer.parseInt((request.getParameter("value"))));
System.out.println(request.getParameter("value") + " "+ request.getParameter("field")+ " "+ request.getParameter("modi"));
}
JavaScript方法:
$.post('/TheDartScorer/dartViewModel',
{field : name, value: result, modi : mod}
);
问题通过一个简单的post请求得到解决。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
dartfield.setFieldName(request.getParameter("field"));
dartfield.setFieldModifier(Integer.parseInt((request.getParameter("modi"))));
dartfield.setFieldvalue(Integer.parseInt((request.getParameter("value"))));
System.out.println(request.getParameter("value") + " "+ request.getParameter("field")+ " "+ request.getParameter("modi"));
}
$.post('/TheDartScorer/dartViewModel',
{field : name, value: result, modi : mod}
);