<h:form>
Do you have a driving license?
<h:selectOneMenu value="#{requestScope.license}">
<f:selectItem itemLabel="Select..." itemValue=""/>
<f:selectItem itemLabel="Yes" itemValue="Y"/>
<f:selectItem itemLabel="No" itemValue="N"/>
<f:ajax render="@form"/>
</h:selectOneMenu>
<br/>
Enter driving license number:
<h:inputText value="#{requestScope.number}"
rendered="#{'Y' eq requestScope.license ? true : false}"/>
<br/>
<h:commandButton value="Submit"/>
<br/>
Your driving license number is: #{requestScope.number}
</h:form>
使用JSF 2.0实现非常常见方案时出现问题
上面的JSF 2.0标记描述了一种非常常见的情况。
如果用户对“您是否拥有驾驶执照?”这一问题选择“是”,则Ajax会显示“输入您的驾驶执照号码:”字段。
如果用户输入驾驶执照号码并按下按钮,输入数据应显示在底部(根据我的理解),但不会发生。
请有人解释一下。
答案 0 :(得分:4)
您需要将属性绑定到一个值得满足的托管bean,并在h:outputText
中显示该数字,以便可以重新呈现它。
这是改进。
<h:form>
<h:outputLabel for="license" value="Do you have a driving license?" />
<h:selectOneMenu id="license" value="#{bean.license}" required="true">
<f:selectItem itemLabel="Select..." itemValue="" />
<f:selectItem itemLabel="Yes" itemValue="Y" />
<f:selectItem itemLabel="No" itemValue="N" />
<f:ajax render="@form"/>
</h:selectOneMenu>
<br/>
<h:panelGroup id="input" rendered="#{bean.license eq 'Y'}">
<h:outputLabel for="number" value="Enter driving license number:" />
<h:inputText id="number" value="#{bean.number}" required="true" />
<br/>
</h:panelGroup>
<h:commandButton value="Submit" action="#{bean.submit}">
<f:ajax execute="@form" render="@form" />
</h:commandButton>
<br/>
<h:outputText value="Your driving license number is: #{bean.number}"
rendered="#{bean.license eq 'Y' and not empty bean.number}" />
<br/>
<h:messages />
</h:form>
使用这样的bean:
@ManagedBean
@ViewScoped
public class Bean {
private String license;
private Integer number;
public void submit() {
System.out.println("Has license? " + license);
System.out.println("Submitted number: " + number);
}
// Add/generate getters and setters.
}