日期:2014-05-16  浏览次数:20465 次

JSF中使用rendered时的两个问题??
??? <tr>
?????????????? <td valign="top" align="right">
?? ??? ??? ??? ?<h:outputText
?? ??? ??? ??? ???? rendered = "#{addWallpaperBulkConfigController.addWallpaperBulkConfigModel.contentTypeID != 20}"
?? ??? ??? ??? ???? value="Delimiters(Ordered):"/>&nbsp;
?? ??????? </td>

?? ??? ?<td>
?? ??? ???? <h:inputText id="delimiters"? ?
?? ??? ???? rendered = "#{addWallpaperBulkConfigController.addWallpaperBulkConfigModel.contentTypeID != 20}"
?? ??? ???? disabled="true"
?? ??? ??? ???? value="#{addWallpaperBulkConfigController.addWallpaperBulkConfigModel.myDelimiter}">
?? ??? ??? ?</h:inputText>
?????????????? </td>
????????? </tr>

?? ???? 有上面所示的一段JSP代码(用到了JSF),现在的问题是:
?? ???? 1,两个rendered的判断逻辑是一模一样的,于是就想有没有什么方法来避免这个两判断逻辑的重复出现呢?用JavaScript行不行?
?? ???? 2,当两个rendered不满足时,这个<tr>应该是不显示的,可看了生成的HTML代码时发现实际情况却是如下所示的样子:

?? ??? ?<tr>?????????? ?
?? ??? ??? ?<td valign="top" align="right">&nbsp;</td>
?? ??? ??? ?<td> </td>
?? ??? ?</tr>

?? ??? 这样的HTML虽说功能上没影响,但多了一空行,看着很不顺眼.
?? ??? 有没有什么方法来改进呢?
1 楼 sunyson 2008-03-21  
rendered的判断,是在服务端解析EL表达式.所以你可以在BackBean中用简单的逻辑值替换复杂的表达式.
JSF是会生成一些看起来多余的标记,这是为了组件的通用性.