站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题使用JSF(Java Server Faces)开发(三)

使用JSF(Java Server Faces)开发(三)

摘要: 使用JSF(Java Server Faces)开发(三)
内容: 下拉列表(Drop-Down List)

标记用于生成包含几个颜色选项的下拉列表。

标记包含在中,作为下拉列表的选项:





..........












..........




上面的JSP代码生成下面的HTML片断:



<form method="post" action="/usingjsf/faces/edit.jsp">
..........

Color:

<select name="color" size="1">
<option value="black">Black</option>
<option value="red">Red</option>
<option value="blue">Blue</option>
<option value="green" selected>Green</option>
</select>


..........
</form>



下拉列表定义为color,类型为字符串(String):



public class PBean implements java.io.Serializable {

..........

private String color;

public String getColor() {
return color;
}

public void setColor(String color) {
this.color = color;
}

..........

}


当HTML表单被生成时,JSF将HTML属性selected加入到值与JavaBean模型color属性相同的列表项中。假设没有验证错误,JSF收到包含新颜色值的用户输入后会刷新JavaBean属性。



单选钮(Radio Button)

标记用于生成一组单选钮:





..........



layout="LINE_DIRECTION">







..........



上面的JSP代码生成如下代码:



<form method="post" action="/usingjsf/faces/edit.jsp">
..........

Alignment:

<table border="0">
<tr>
<td><input type="radio" checked
Left</td>
<td><input type="radio"
Center</td>
<td><input type="radio"
Right</td>
</tr>
</table>


..........
</form>



单选钮定义为align:



public class PBean implements java.io.Serializable {

..........

private String align;

public String getAlign() {
return align;
}

public void setAlign(String align) {
this.align = align;
}

..........

}


HTML表单生成时,JSF将HTML属性checked加入到与JavaBean模型的align属性值相同的单选钮中。假如没有验证错误,JSF收到新摆放位置的用户输入时刷新JavaBean属性。



复选钮(Checkbox)

文件edit.jsp包含3个由标记生成的复选钮。这些界面组件包含在由标记生成的表格(table)中:





..........





valueRef="pbean.bold"/>



valueRef="pbean.italic"/>



valueRef="pbean.underline"/>



..........




上面代码生成如下片断:



<form method="post" action="/usingjsf/faces/edit.jsp">
..........

Style:

<table border="0" cellspacing="5">
<tr>
<td><input type="checkbox"
Bold</td>
<td><input type="checkbox"
Italic</td>
<td><input type="checkbox"
Underline</td>
</tr>
</table>
..........
</form>



3个复选钮分别与类型为布尔(Boolean)的bold、italic、underline绑定在一起:



public class PBean implements java.io.Serializable {

..........

private boolean bold;

public boolean isBold() {
return bold;
}

public void setBold(boolean bold) {
this.bold = bold;
}
private boolean italic;

public boolean isItalic() {
return italic;
}

public void setItalic(boolean italic) {
this.italic = italic;
}
private boolean underline;

public boolean isUnderline() {
return underline;
}

public void setUnderline(boolean underline) {
this.underline = underline;
}

..........

}


生成HTML表单时,JSF将checked属性加入到每一个JavaBean属性为真(true)的复选钮中。假如没有验证错误,JSF收到用户输入后就会刷新JavaBean属性。



在本例中,复选钮是分别独立生成的。JSF也提供了标记用于生成一组复选钮。还提供了两个标记用于从集合与数组中生成表格。



命令按钮(Command Buttons)

文件faces-config.xml定义了导航规则,决定JSF在用户点击网页中的命令按钮时做什么,网页的路径由标记(/edit.jsp)指定。由元素分别定义了两个导航块(navigation case):



..........


/edit.jsp

editOutcome
/edit.jsp


viewOutcome
/view.jsp


..........



文件edit.jsp包含由标记生成的两个按钮。每个都有一个标识(ID)、一个标签、一个命令名称(这里没有使用,但JSF需要)以及一个action或actionRef属性:





..........


commandName="viewCmd" action="viewOutcome"/>
label="Bold Upper Case / View"
commandName="boldUpperCaseCmd"
actionRef="pbean.boldUpperCaseAction"/>




上面JSP代码生成如下HTML片断:



<form method="post" action="/usingjsf/faces/edit.jsp">
..........


<input type="submit" name="view" value="View">
<input type="submit" name="boldUpperCase"

</form>



JSF会在每次浏览器提交用户输入时验证表单中的数据。如果验证器没有发出错误信号而且没有类型转换错误,JSF便会分析导航块(navigation case)。对于第一个按钮,JSF会得到action属性的值viewOutcome,该值与第二个导航块的元素中的文本匹配。因此,JSF将HTTP请求转发给view.jsp,文件view.jsp的路径包含在第二个导航块的元素中。



当用户点击第二个按钮时,JSF则调用PBean对象的getBoldUpperCaseAction()方法。该方法返回一个BoldUpperCaseAction的实例,BoldUpperCaseAction则是PBean的内部类。接着,JSF调用invoke()方法,该方法返回一个在运行时决定的结果而不是固定不变的HTML文件:



public class PBean implements java.io.Serializable {

..........

public BoldUpperCaseAction getBoldUpperCaseAction() {
return new BoldUpperCaseAction();
}

public class BoldUpperCaseAction
extends javax.faces.application.Action {
public String invoke() {
String ucText = getText().toUpperCase();
if (isBold() && getText().equals(ucText))
return "viewOutcome";
else {
setBold(true);
setText(ucText);
return "editOutcome";
}
}
}

}


如果bold(粗体)属性的值为true(真)并且文本的所有字符为大写的,JSF就按照第二个导航块中的定义,与另一个按钮情况一样JSF将HTTP请求转发给view.jsp。另外,invoke()方法会将bold属性设为true,并将文本的所有字符改为大写的,最后返回字符串editOutcome,使JSF按照第一个导航块的定义,保持edit.jsp为当前页。


Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd, scwcd 下拉
↑返回目录
前一篇: 使用JSF(Java Server Faces)开发(四)
后一篇: 使用JSF(Java Server Faces)开发(二)