在JSF中有很多材料区分value属性和binding属性.
我对这两种方法如何彼此不同感兴趣.鉴于:
public class User {
private String name;
private UICommand link;
// Getters and setters omitted.
}
Run Code Online (Sandbox Code Playgroud)
<h:form>
<h:commandLink binding="#{user.link}" value="#{user.name}" />
</h:form>
Run Code Online (Sandbox Code Playgroud)
value指定属性时会发生什么变化.getter运行以返回bean 的name属性值User.该值将打印到HTML输出.
但我无法理解它是如何binding运作的.生成的HTML如何维护与bean link属性的绑定User?
下面是手动美化和注释后生成的输出的相关部分(注意id j_id_jsp_1847466274_1是自动生成的,并且有两个隐藏的输入小部件).我正在使用Sun的JSF RI 1.2版.
<form action="/TestJSF/main.jsf" enctype="application/x-www-form-urlencoded"
id="j_id_jsp_1847466274_1" method="post" name="j_id_jsp_1847466274_1">
<input name="j_id_jsp_1847466274_1" type="hidden" value="j_id_jsp_1847466274_1">
<a href="#" onclick="...">Name</a>
<input autocomplete="off" id="javax.faces.ViewState" name="javax.faces.ViewState"
type="hidden" value="-908991273579182886:-7278326187282654551">
</form>
Run Code Online (Sandbox Code Playgroud)
在哪里binding存放在这里?
在JSF dataTable中,我想显示行旁边的行索引...如:
Column A Column B
1 xxx
2 yyy
Run Code Online (Sandbox Code Playgroud)
我认为我可以使用像#{rowIndex}这样的隐式el变量,但这不起作用.
我找到的解决方案是为数据表创建绑定并使用绑定,如:
<h:dataTable var="item" value="#{controller.items}" binding="#{controller.dataTable}">
<h:column>#{controller.dataTable.rowIndex}</h:column>
<h:column>value</h:column>
</h:dataTable>
Run Code Online (Sandbox Code Playgroud)
但是当我在页面中有许多嵌套的dataTable时,这个解决方案很复杂并且不能很好地工作.
关于如何以更好的方式解决这个问题的任何想法?
以下代码如何工作:
#{aaa.id}
<h:inputText id="txt1" binding="#{aaa}"/>
Run Code Online (Sandbox Code Playgroud)
我的意思是,通常组件绑定工作,通过在bean中指定属性(类型为UIComponent).这里没有bean也没有属性但是名称"aaa"被正确绑定(显示组件id - "txt1").它是如何工作的/指定的位置?
谢谢
更新:JSF2.0规范[pdf](第3.1.5章)说:
"组件绑定是一种特殊的值表达式,可用于促进将组件实例"连接"到JavaBean的相应属性...指定的ValueExpression必须指向UIComponent类型的读写JavaBeans属性(或适当的)子类)."
我正在尝试检索 ap:dataList 中的 ah:panelGroup 的客户端 ID。
我尝试了两种方法:
1.使用 component.clientId 例如:
<h:panelGroup id="listItem">
<h:outputText value="#{component.clientId}" />
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)
2.使用 p:component() 例如:
<h:panelGroup id="listItem">
<h:outputText value="#{p:component('listItem')}" />
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)
请注意,此面板组位于数据列表中。现在,在这两种情况下生成的客户端 ID 是不同的。(1) 没有附加到客户端 ID 的值“listItem”,而 (2) 在生成的 clientId 中具有值“listItem”。
此外,使用 (1) 生成的客户端 ID 与生成的 html 组件上的不同。
任何人都可以对这个问题有所了解,为什么会这样?
<h:panelGroup>我正在使用 Primefaces 5.0,当<p:inputText>无效时我需要在元素中添加类。我有以下代码:
<h:panelGroup layout="block" styleClass="form-group #{ VALIDATION HERE ? '' : 'has-error'}" >
<p:outputLabel for="txtUserId" value="ID:"/>
<p:inputText styleClass="form-control" id="txtUserId" required="true" value="#{userAction.user.id}">
<f:ajax event="keyup" execute="@this" render="msgtxtUserId"/>
<f:validateLength minimum="2" />
</p:inputText>
<p:message for="txtUserId" id="msgTxtIdUsuario" />
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)
先感谢您。