Zaw*_* oo 2 java jsf primefaces
我的程序出了什么问题?我认为一切都很好。我的changeKeyValue
方法获取所选值“REFERENCE”并将true
布尔值设置为showReference
. h:panelGroup
但是,如果我使用update="targetPanel"
in ,我的页面将无法呈现p:ajax
。h:panelGroup
当我使用时它可以渲染update="entryForm"
。
我缺少什么?
我的页面.xhtml
<h:form id="entryForm">
<p:selectOneMenu value="#{MyBean.keyFactorValue}" required="true" style="width:257px;" id="keyFactorValue">
<f:selectItems value="#{MyBean.selectItemList}" var="type" itemLabel="#{type.label}" itemValue="#{type}"/>
<p:ajax listener="#{MyBean.changeKeyValue}" update="targetPanel" event="change"/>
</p:selectOneMenu>
<h:panelGroup id="targetPanel" rendered="#{MyBean.showReference}">
.......
</h:panelGroup>
</h:form>
Run Code Online (Sandbox Code Playgroud)
KeyFactorValue.java
public enum KeyFactorValue {
REFERENCE("Reference"), FORM_TO("From-To"), FIXED("Fixed");
private String label;
private KeyFactorValue(String label) {
this.label = label;
}
public String getLabel() {
return label;
}
}
Run Code Online (Sandbox Code Playgroud)
MyBean.java
@Scope(ScopeType.CONVERSATION)
@Name("MyBean")
public class MyBean {
private boolean showReference;
public boolean isShowReference() {
return showReference;
}
public KeyFactorValue[] getSelectItemList() {
return KeyFactorValue.values();
}
public void changeKeyValue(AjaxBehaviorEvent e) {
KeyFactorValue type = keyFactor.getKeyFactorValue();
System.out.println("Selected KeyFactorValue : " + type);
switch(type) {
case REFERENCE :{
showReference = true;
break;
}
default :{
showReference = false;
break;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您无法使用 ajax 更新 HTML 中非由 JSF 呈现的元素。JavaScript(ajax 背后的代码)将无法通过以下方式找到它document.getElementById()
替换其内容。
您只能使用 ajax 更新 HTML 中始终由 JSF 呈现的元素。将有条件渲染的组件包装在另一个始终渲染的组件中,并用 ajax 更新它。
<h:panelGroup id="targetPanel">
<h:panelGroup rendered="#{MyBean.showReference}">
...
</h:panelGroup>
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2650 次 |
最近记录: |