【发布时间】:2013-12-29 16:15:48
【问题描述】:
我有 2 页,inputForm.xhtml 和 outputPage.xhtml。
在inputForm.xhtml 中,有 1 个文本字段和 1 个复选框。当用户点击提交按钮时,会将值传递给 URL 中的outputPage.xhtml。
textfield的值可以正确传递。但是,无论是否选中复选框,URL中的参数始终为false。
例如http://localhost:8080/jsf-web/outputPage.xhtml?c=false&n=franz
我正在使用 myFaces 2.1.13。我真的不知道如何解决这个问题。谢谢。
inputForm.xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<f:metadata>
<f:viewParam name="n" value="#{inputFormBean.name}" />
<f:viewParam name="c" value="#{inputFormBean.nameUppercase}" />
</f:metadata>
<h:head>
</h:head>
<h:body>
<h:form>
<p>Name: <h:inputText value="#{inputFormBean.name}" /></p>
<p>Name uppercase: <h:selectBooleanCheckbox value="#{inputFormBean.nameUppercase}"/></p>
<p><h:commandButton action="output_page" value="Submit" /></p>
</h:form>
</h:body>
</html>
outputPage.xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<f:metadata>
<f:viewParam name="n" value="#{outputPageBean.name}" />
<f:viewParam name="c" value="#{outputPageBean.nameUppercase}" />
</f:metadata>
<h:head>
</h:head>
<h:body>
<h3>Welcome #{outputPageBean.nameUppercase ? outputPageBean.name.toUpperCase() : outputPageBean.name}!!</h3>
</h:body>
</html>
faces-config.xml
<?xml version="1.0"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>output_page</from-outcome>
<to-view-id>/outputPage.xhtml</to-view-id>
<redirect include-view-params="true"/>
</navigation-case>
</navigation-rule>
</faces-config>
InputFormBean.java
package com.franzwong.jsfweb;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean
@RequestScoped
public class InputFormBean {
private String name;
private boolean nameUppercase;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isNameUppercase() {
return nameUppercase;
}
public void setNameUppercase(boolean nameUppercase) {
this.nameUppercase = nameUppercase;
}
}
OutputPageBean.java
package com.franzwong.jsfweb;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean
@RequestScoped
public class OutputPageBean {
private String name;
private boolean nameUppercase;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isNameUppercase() {
return nameUppercase;
}
public void setNameUppercase(boolean nameUppercase) {
this.nameUppercase = nameUppercase;
}
}
【问题讨论】: