JSF theo thiết kế sẽ bỏ qua tất cả các thuộc tính tùy chỉnh khi hiển thị HTML. Bạn cần một trình kết xuất tùy chỉnh. Đây là trường hợp của PrimeFaces <p:autoComplete>
(và tất cả các thành phần khác) may mắn tương đối đơn giản. Nó đủ để ghi đè lên chỉ là phương pháp renderPassThruAttributes()
trong đó bạn thêm thuộc tính mới mà bạn muốn hiển thị đối số attrs
và cuối cùng ủy quyền cho phương thức siêu.
Ví dụ:
package com.example;
import java.io.IOException;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import org.primefaces.component.autocomplete.AutoCompleteRenderer;
public class MyAutoCompleteRenderer extends AutoCompleteRenderer {
@Override
protected void renderPassThruAttributes(FacesContext facesContext, UIComponent component, String[] attrs) throws IOException {
String[] newAttrs = new String[attrs.length + 1];
System.arraycopy(attrs, 0, newAttrs, 0, attrs.length);
newAttrs[attrs.length] = "x-webkit-speech";
super.renderPassThruAttributes(facesContext, component, newAttrs);
}
}
Để làm cho nó chạy, đăng ký nó như sau trong của webapp của bạn faces-config.xml
:
<render-kit>
<renderer>
<component-family>org.primefaces.component</component-family>
<renderer-type>org.primefaces.component.AutoCompleteRenderer</renderer-type>
<renderer-class>com.example.MyAutoCompleteRenderer</renderer-class>
</renderer>
</render-kit>
(bạn có thể tìm hiểu các gia đình và renderer loại thành phần bằng cách nhìn vào mã nguồn của AutoComplete
lớp , chúng được chỉ định là COMPONENT_FAMILY
và RENDERER_TYPE
hằng số trong đó)
Không, chỉ cần chú thích @FacesRenderer
sẽ không hoạt động khi mục đích là ghi đè lên các trình kết xuất tùy chỉnh theo các đường dẫn đã được đăng ký trong một faces-config.xml
.
hãy xem này http://stackoverflow.com/a/6675592/617373 – Daniel