首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Tapestry4中是不是控件定义与放置位置有关

2012-10-25 
Tapestry4中是否控件定义与放置位置有关?环境:T4 Home.html htmlbody jwcid@Bodytable width246

Tapestry4中是否控件定义与放置位置有关?
环境:T4
Home.html

<html><body jwcid="@Body">
     <table width="246" border="0" cellpadding="0" cellspacing="0" align="center">
       <form jwcid="submitForm">
          <tr><td width="219" height="16" valign="top">
              input1<input type="text" name="textfield" jwcid="input1"/>
          </td></tr>
          <tr><td height="23" valign="top">
              <input type="submit" name="Submit2" jwcid="submit1"/>
          </td></tr>
          <tr><td height="21" valign="top">
              <input type="submit" name="Submit22" jwcid="submit2"/>
          </td></tr>
          <tr><td height="29" colspan="2" valign="top">
              input2<input type="text" name="textfield22" jwcid="input2"/>
          </td></tr>
      </form>
    </table>
</body></html>

Home.page

<component id="submitForm" type="Form"/>
<component id="input1" type="TextField">
          <binding name="value" value="input1"/>
</component>
<component id="input2" type="TextField">
          <binding name="value" value="input2"/>
</component>
<component id="submit1" type="Submit">
          <binding name="listener" value="listener:submit1"/>
</component>
<component id="submit2" type="Submit">
          <binding name="listener" value="listener:submit2"/>
</component>
Home.java


public abstract class Home extends BasePage{

          @InjectPage("Home")
          public abstract Home getHome();
          private String input1;
          private String input2;
          public String getInput1() {
                    return input1;
          }
          public void setInput1(String input1) {
                    this.input1 = input1;
          }
          public String getInput2() {
                    return input2;
          }
          public void setInput2(String input2) {
                    this.input2 = input2;
          }
          public IPage submit1(){
                    this.setInput2(this.getInput1()+this.getInput2());
                    return getHome();
          }
          public IPage submit2(){
                    this.setInput1(this.getInput1()+this.getInput2());
                    return getHome();
          }
         }
运行程序,对input1,input2,submit1,submit2操作如下:
1,在input1中输入1;input2中输入2,如图:

2,点击submit1,得到如下结果:

3,重复步骤1, 在input1中输入1;input2中输入2,然后点击submit2,得到如下结果:

------------------------------
上述,操作中input2根本没有接受任何参数,但是input1却是正常的,请问这个问题是什么原因造成?是否是bug. <input type="submit" value="Submit2" jwcid="submit2"/><br>
input2<input jwcid="input2"/><br>

这样定义,那么我们可以得到的输出是:

我是submit2(),我运行拉
我是setInput2(),我运行拉

很明显,赋值发生在调用之后。所以会有null出现

不知道我解释得对不对哈~~
这里

你定义的是Submit组件,但是并没有告诉Tapestry你的Form的listener是谁。

所以我们可以这样写代码

Home.html




Home.java


    @InjectPage("Home")    public abstract Home getHome();        public IPage submit1(){        getHome().setInput2(getInput1() + getInput2());        return getHome();    }        public IPage submit2(){        getHome().setInput1(getInput1() + getInput2());        return getHome();    }

测试ok,可以在submit中直接调用。没有必要通过form的listener来执行。
thank you all.

热点排行