lg属性绑?/h1>
我所接触到的ZJSF的Web应用中,位于UI界面上的一个界面元素或lgQ想要显C数据,通常的写法是q样Q?br />
greeting.xhtml
<h:inputText value="#{demo.helloduke.UserBean.name}"/>
demo.helloduke.UserBean.java:
@ManagedBean(name="demo.helloduke.UserBean", scope=ManagedBeanScope.SESSION)
public class UserBean {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
q样的写法意味着Q在greeting.xhtml中,需要知道UserBean的存在,q且需要知道UserBean的name属性是对应着q个inputTextlg的value。这在很大程度上Q限制了greeting.xhtml的作用范_(d)使这个UI完全没有Z(x)被重用。很长一D|_(d)q都是困照着我的一个问题?br />
Binding是IoVC包含的一个重要特性,它不仅可以UI独立出来Q而且Binding是采用后期绑定模式实玎ͼ为组件的无状态的实现提供了底层基支撑。关于IoVC的实现方式,在这随W中q不q多讨论?br />
在IoVC的编E模式下Q对UI上的界面元素的控制力被{Ud了ManagedBean中,UI不需要关心谁在用它Q以?qing)数据的来源?br />
IoVC模式的Hello Duke的UI?qing)managedBean:
greeting.xhtml
<h:inputText id="name"/>
demo.helloduke.UserBean.java:
@ManagedBean(name="demo.helloduke.UserBean", scope=ManagedBeanScope.SESSION)
public class UserBean {
@Bind
private String name;
}
@Bind标签Q提供了ManagedBean的filedl定到组件的attributes中的能力Q默认情况下Q@BindҎ(gu)所作用的filed的name来匹配UI中的元素的idQ然后将field的值取出绑定到对应的UI中的lg上,上述代码表示Q将UserBean中的name属性,l定C之对应的inputTextlg的value中?br />
下面列出了@Bind标签的典型用场景:(x)
@Bind
private UIDataGrid grid;
@Bind(id="grid", attribute="width")
private int width;
@Bind(id="grid", attribute="height")
private int height;
public void initGrid() {
this.width = 500;
this.height = 400;
}
public void reload() {
this.grid.reload();
}
使用@Bind标签组件的attributes与ManagedBean中的属性一一l定h之后Q在UI上如果组件发生变化,其变化了的属性会(x)反映到ManagedBean中,同样Q在ManagedBean中,如果更改了属性|UIlg也会(x)发生相应的变化?br />
一个用IoVC模式的完整页面与ManagedBeanQ其中涉?qing)到的其他标{,?x)在后面介绍刎ͼQ?br />
q行效果Q?br />

calc.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<f:view xmlns:f="http://java.sun.com/jsf/core"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:w="http://www.apusic.com/jsf/widget"
renderKitId="AJAX">
<w:page title="View Binding Example">
<h:form>
<h:panelGrid columns="1">
<h:inputText id="first"/>
<h:inputText id="second"/>
<h:outputText id="result"/>
</h:panelGrid>
<h:commandButton value="+" id="add"/>
<h:commandButton value="-" id="subtract"/>
<h:commandButton value="*" id="multiply"/>
<h:commandButton value="/" id="divide"/>
</h:form>
<h:messages/>
</w:page>
</f:view>
CalcBean.java:
@ManagedBean(scope=ManagedBeanScope.SESSION)
public class CalcBean
{
@Bind
private double first = 10;
@Bind
private double second = 20;
@Bind
private double result;
@Bind(id="result", attribute="style")
private String style;
@Action
public void add() {
result = first + second;
style = "color:red";
}
@Action
public void subtract() {
result = first - second;
style = "color:green";
}
@Action
public void multiply() {
result = first * second;
style = "color:blue";
}
@Action
public void divide() {
result = first / second;
style = "color:black";
}
}

]]>