Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 JSF2通过URL发送参数_Jsf 2_Parameter Passing - Fatal编程技术网

Jsf 2 JSF2通过URL发送参数

Jsf 2 JSF2通过URL发送参数,jsf-2,parameter-passing,Jsf 2,Parameter Passing,我试图通过URL发送参数,但失败了,因为我无法为bean赋值,或者无法用URL字符串表示值。顺便说一句,当我手写颜色值时,一切都正常,例如: <h:button outcome="viewParams?c=red"/> 作为您的目标页面viewParams.xtml: 获取视图id并将参数附加到url。结果表明,该按钮需要重新提交,因为未设置c值。棘手的是设置了viewMngr.selectedColor,但要设置参数c,需要重新选择按钮。以下是编辑后的代码:

我试图通过URL发送参数,但失败了,因为我无法为bean赋值,或者无法用URL字符串表示值。顺便说一句,当我手写颜色值时,一切都正常,例如:

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

作为您的目标页面viewParams.xtml



获取视图id并将参数附加到url。

结果表明,该按钮需要重新提交,因为未设置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>


谢谢您的回答。这表明解决同一任务的方法不止一种。您的代码可以工作,但必须向该按钮添加id=“buttonnid”,并在颜色值更改后进行渲染。如果你编辑你的代码,我会给你+1,我想你需要重新启动你的按钮,因为你有参数直接包装到你的结果(所以它是给客户端与当前的颜色连接)。但是,如果使用我的解决方案,请在单击按钮时检查
{viewMngr.selectedColor}
,以便它同时获得该属性中的颜色。更改值时不需要重新启动按钮。啊,关于“+ 1”,你应该考虑接受点击复选标记的答案(✓ 请在计票台下方做标记),因为我看到您的大多数问题仍然没有答案;-)实际上,您需要将id添加到按钮并重新提交它,因为没有它,c无法设置,并且通过url发送参数失败。这与bean值无关,而是与c值有关。请在
ViewMngr
中的
@ManagedBean
注释下方使用
@ViewScoped
进行检查。这样,您就可以保持通过
h:selectOneMenu
完成的选择。顺便说一下,
Color
不能是
@ManagedBean
。ViewMngr范围是正确的(虽然我尝试了ViewScope),但是我不需要使用ViewScope,因为我想传递值并忘记ViewMngr bean中的内容,所以请求范围在这里很好。我不明白为什么颜色不能是@ManagedBean,因为我使用颜色来获取参数值。
@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;
}
}
    <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>