JSF 2通过URL发送参数

时间:2013-08-22 14:03:24

标签: jsf-2 parameter-passing

我正在尝试通过URL发送参数,但它失败了,因为我有点无法为bean分配值,或者我无法使用URL字符串连接值。顺便说一句,当我手工编写颜色值时,一切正常,例如:

    <h:button outcome="viewParams?c=red"/>

这是我正在尝试发送参数的页面代码。

                <h:form>
                    <h:selectOneMenu value="#{viewMngr.selectedColor}">
                        <f:selectItems value="#{viewMngr.colors}" var="c"
                            itemLabel="#{c}" itemValue="#{c}" />
                        <f:ajax listener="#{viewMngr.valueChanged}" />
                    </h:selectOneMenu>
                    <h:button outcome="viewParams?c=#{viewMngr.selectedColor}"/>
                </h:form>

这是viewManager bean代码(据我所知,bean值已设置,因为我可以将其打印出来)

@ManagedBean
public class ViewMngr {
private ArrayList<String> colors = new ArrayList<String>();

private String selectedColor;

public ViewMngr()
{
    getColors().add("red");
    getColors().add("green");
    getColors().add("blue");
    getColors().add("gray");
    getColors().add("yellow");
    getColors().add("orange");
}


public ArrayList<String> getColors() {
    return colors;
}

public void setColors(ArrayList<String> colors) {
    this.colors = colors;
}

public String getSelectedColor() {
    return selectedColor;
    }

public void setSelectedColor(String selectedColor) {
    System.out.println("Selected color: " + selectedColor);
    this.selectedColor = selectedColor;
}

public void valueChanged() {
    System.out.println("Value changed!");
}
}

现在这是第二页的代码,它试图捕获该参数:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:p="http://primefaces.org/ui"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:f="http://java.sun.com/jsf/core">

            <f:metadata>
                <f:viewParam name="c" value="#{color.color}"/>
            </f:metadata>

            <h:body style="background-color:#{color.color}">
              <fieldset>
                <h:form>
                  <h:outputText value="Some text!"/>
                </h:form>
              </fieldset>
            </h:body>
    </html>

这是彩豆:

@ManagedBean
public class Color {
private String color;

public String getColor() {

    return color;
}

public void setColor(String color) {
    if(color != null)
        System.out.println(color);
    this.color = color;
}
}

2 个答案:

答案 0 :(得分:1)

成为目标网页 viewParams.xtml

<h:button outcome="viewParams">
    <f:param name="c" value="#{viewMngr.selectedColor}" />
</h:button>

获取视图ID并将参数附加到网址。

答案 1 :(得分:0)

事实证明,该按钮需要重新渲染,因为c值未设置。棘手的部分是viewMngr.selectedColor被设置但是要设置参数c,需要重新渲染按钮。这是编辑过的代码:

    <h:body>
            <fieldset>

                <h:form prependId="false">
                    <h:selectOneMenu value="#{viewMngr.selectedColor}">
                        <f:selectItems value="#{viewMngr.colors}" var="c"
                            itemLabel="#{c}" itemValue="#{c}" />
                    <f:ajax listener="#{viewMngr.valueChanged}" render="buttonId"/>
                    </h:selectOneMenu>
                    <h:button id="buttonId" outcome="viewParams?c=#{viewMngr.selectedColor}"/>

                </h:form>

            </fieldset>
    </h:body>