2013-03-22 207 views
1

我有一个Web服务并构建了一个客户端。我写了一个xhtml页面,向Web服务发送名称和电话号码。如果我使用Bean使用setter和getters发送字符串,则Web服务将返回空值给客户端。如果我在函数中直接输入字符串,我会从Web服务中获取正确的字符串。Java EE,Web服务客户端,Java

public void submit() 
{ PhoneBookProxy.addEntries(name, phoneNum);} 

这是行不通的。

public void submit() 
{ PhoneBookProxy.addEntries("Jane Doe", "555 555-5555"); } 

这是行不通的。

这是作业。感谢所有的帮助。

我使用NetBeans在JDK 1.7

@ManagedBean 
@NoneScoped 
public class phoneBookClient { 

private String firName, lasName, thphoneNum; 
private PhoneBook PhoneBookProxy; 

public phoneBookClient() 
{ 
    PhoneBook_Service service = new PhoneBook_Service(); 
    PhoneBookProxy = service.getPhoneBookPort(); 
} 

public void setFirstName(String fName) 
{ 
    firName = fName; 
} 

public String getFirstName() 
{ 
    return firName; 
} 

    public void setLastName(String lName) 
{ 
    lasName = lName; 
} 

public String getLastName() 
{ 
    return lasName; 
} 

public void setPhoneNum(String phoneNum) 
{ 
    thphoneNum = phoneNum; 
} 

public String getPhoneNum() 
{ 
    return thphoneNum; 
} 

public void submit() 
{ 
    PhoneBookProxy.addEntry(getLastName(), getFirstName(), getPhoneNum()); 
} 

public List<Object> getEntries() 
{ 
    return PhoneBookProxy.getEntries(); 
} 

}

的index.xhtml

<?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:f="http://java.sun.com/jsf/core" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 
<head> 
    <title>Phone Book Client</title> 
</head> 
<body> 
    <h1>Please fill in all fields and click Submit</h1> 
    <h:form> 
     <h2>Please Enter your First Name</h2> 
      <h:inputText id="fnameInputText" required="true" 
       requiredMessage="Please enter your First name" 
       value="#{phoneBookClient.firstName}" 
       validatorMessage="Name must be fewer than 30 characters"> 
       <f:validateLength maximum="30" /> 
      </h:inputText> 
     <h:message for="fnameInputText" /> 
     <br /> 
     <h2>Please Enter your Last Name</h2> 
     <h:inputText id="lnameInputText" required="true" 
       requiredMessage="Please enter your Last name" 
       value="#{phoneBookClient.lastName}" 
       validatorMessage="Name must be fewer than 30 characters"> 
       <f:validateLength maximum="30" /> 
      </h:inputText> 
     <h:message for="lnameInputText" /> 
     <br /> 
     <h2>Please enter your phone number in format: (xxx) xxx-xxxx</h2> 
     <h:inputText id="phoneInputText" required="true" 
       requiredMessage="Please enter a valid phone number" 
       value="#{phoneBookClient.phoneNum}" 
       validatorMessage="Invalid phone number format"> 
       <f:validateRegex pattern= 
        "((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}" /> 
     </h:inputText> 
     <h:commandButton value="Submit" action="#{phoneBookClient.submit()}"/> 
     </h:form> 
    <ui:repeat var="list" value="#{phoneBookClient.entries}" > 
     <h:outputText value="#{list}" /> 
     <br /> 
    </ui:repeat> 
</body> 
</html> 
+2

什么是从'name'的价值观和'phoneNum'在'提交()'方法? – 2013-03-22 15:07:29

+2

听起来像'name'和'phoneNum'变量为空。你能发布设置这些值的代码吗? – 2013-03-22 15:07:38

+1

听起来像设置者要么不工作,要么不被调用。 – Zutty 2013-03-22 15:07:51

回答

1

这个问题是不是Web服务,它是关于JSF豆类设置变量。

为什么在托管bean定义中使用@NoneScoped?这不适合你的情况。

如果您使用jsf 2+,您可以使用@ViewScoped。你可以阅读Communication in JSF 2.0关于这个概念。

作为一个方面说明,这是一个糟糕的编码习惯。

public String getFirstName() 
{ 
    return firName; 
} 

定义你的变量名字不firName,或者如果它是firName写你的方法,如getFirName

+0

使用@ViewScoped工作。谢谢。我知道使用这种不同的字符串是不好的做法。当我试图解决这个问题时,就出现了这个问题。谢谢您的回答。 – NickDeal 2013-03-22 15:28:06

+1

这将是很好的提及[JSF 2中的通信](http://balusc.blogspot.com/2011/09/communication-in-jsf-20.html)以提供更好的答案:) – 2013-03-22 15:32:59

+0

编辑了回答,那篇文章绝对是必读的。 – 2013-03-22 15:36:25