2011-11-08 175 views
3

我有一个非常复杂的JSF页面读取动态输入元素(我们使用JSF2用的facelet),其中我要“插电式”纯HTML窗体节(它代表了一个文档所见即所得模板将在稍后创建为PDF)。 非常简化的页面看起来像JSF的托管bean

<h:form id="formEditDoc"> 
    <p:commandButton styleClass="commandButton" value="Save" 
     actionListener="#{myBean.myAction}" update="masterForm:msg"> 
    </p:commandButton> 

    <!-- some jsf controls here --> 
    .... 

    <!-- this is my dynamic section --> 
    <input id="ft2" type="text" value="foo"/> 
</h:form> 

在Managed Bean为myBean(请求范围)我有动作监听中,我试图让“foo”的字符串,以这样的方式

String text1 = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("ft2"); 

但我无法获得价值。 Text1始终为空。我甚至试图设置AJAX =假到命令,但没有任何改变。 什么我做错了任何想法?

回答

4

这是输入的name=value对发送请求参数name=value而不是id=value。您需要改为设置name属性。

<input id="ft2" name="ft2" type="text" value="foo"/> 

无关的具体问题,我建议使用@ManagedProperty,而不是设定值:

@ManagedProperty("#{param.ft2}") 
private String ft2; 
+0

首先第一件事情:谢谢你的解决方案。对于一般的方法,我的问题更复杂。我不能使用@ManagedProperty(“#{} param.ft2”)私人字符串平方英尺;技术,因为我不知道我的网页上有多少输入字段:它们取决于用户可以创建自己的某个模板。出于同样的原因,我不能使用inputHidden:首先,我希望输入框可以被用户看到并且可以编辑,其次我不知道他们会需要多少人。 – themarcuz

+1

为这些输入提供所有**相同的**名称,并在'String []'属性上使用'#{paramValues.ft}'。它们将按照出现在HTML DOM中的顺序显示。对不起inputhidden,这是一个愚蠢的想法,我忽略了你没有使用'型=“隐藏”'。 – BalusC