0

我正在尝试通过 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;
}
}
4

2 回答 2

1

Being your destination page viewParams.xtml:

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

Takes the view id and appends the params to the url.

于 2013-08-22T16:48:14.647 回答
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>
于 2013-08-23T06:25:41.870 回答