2013-08-22 46 views
0

我试图通过URL发送参数,它失败了,因为我有点不能分配值的bean或我不能concat值与URL字符串。通过我的手都写作品的颜色值,例如方式:通过URL发送参数的JSF 2

<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代码(据我可以看到豆值设置,因为我能够把它打印出来)这里

@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; 
} 
} 

回答

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> 
1

作为您的目的地页面viewParams.xtml

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

注意到视图id和追加PARAMS的URL。

+0

谢谢你的回答。它表明有多种方法可以解决同一个任务。你的代码有效,但你必须添加id =“buttonId”到该按钮,并在颜色值改变时呈现它。。如果你编辑你的代码,我会给你+1 – Benas

+0

我认为你需要重新渲染你的按钮,因为你有param直接包裹到你的结果(所以它被赋予客户端与当前的颜色连接)。但是,如果使用我的解决方案,则在单击按钮时检查'#{viewMngr.selectedColor}',以便同时获取该属性中的颜色。改变数值时不需要重新渲染按钮。啊,关于'+1',你应该考虑接受点击复选标记(✓在投票柜台下面)的答案,因为我看到你的大部分问题仍然没有他们;-) –

+0

其实你需要添加id按钮并重新渲染它,因为没有它c不会被设置,并通过url发送参数失败。这不是关于bean的价值,而是关于c值。 – Benas