-3

我构造了一个肥皂请求并收到了响应。我使用 JAXB 上下文解组响应并获得包含响应的对象。

JAXBContext jc = JAXBContext.newInstance(ResponseMessage.class);
Unmarshaller um = jc.createUnmarshaller();
ResponseMessage output = (NumberResponseMessage)um.unmarshal(soapResponse.getSOAPBody().extractContentAsDocument());

现在我可以通过 get..()/..getValue() 方法访问响应对象(输出)中的数据并在控制台中打印它。但是,当我尝试通过将响应对象添加到 JSP 页面的 ModelAndView 属性来发送响应对象时,就会出现问题。

Model model.addAttribute("response", output);

我得到的错误是 - JSP 不知道如何迭代给定的项目(当我尝试循环时)。

<c:forEach var ="Res" items="${output}">
<td>${Res.TransactionId}</td>
</c:forEach>

由于响应对象包含数百个数据以及内部 JAXB<> 数组,因此不可能将所有数据设置为用户 bean 然后访问。

谁能建议我如何迭代 JSP 页面中的响应对象?

4

5 回答 5

3

查看链接中的代码示例。

它使用std::string::find_first_not_of并且示例实际上显示了您想要做什么!(多么酷啊?)

按照@jogojapan 的建议从链接中处理示例代码

// string::find_first_not_of
#include <iostream>       // std::cout
#include <string>         // std::string
#include <cstddef>        // std::size_t

int main ()
{
  std::string str ("look for non-alphabetic characters...");

  std::size_t found = str.find_first_not_of("abcdefghijklmnopqrstuvwxyz ");

  if (found!=std::string::npos)
  {
    std::cout << "The first non-alphabetic character is " << str[found];
    std::cout << " at position " << found << '\n';
  }

  return 0;
}
于 2013-07-24T06:20:23.393 回答
1

您可以编写一个正则表达式来查找一个字符是否特殊。这是示例:

std::regex rx("[\\[]+|[\"]+|..."); // ... is your special characters

以不同的方式创建每个模式(大写,小写,特殊字符)并使用

std::regex_match如果模式匹配整个或部分字符串,则基本上返回true。

于 2013-07-24T06:21:15.380 回答
1

一个简单的解决方案是创建一个string特殊字符。

//some pseudo code
string password = inputedPassword;
string specialChars = "@#$%&*";

for(int i = 0; i < password.length; i++)
  for(int j = 0; j < specialChars.length; i++)
      if(password[i] == specialChars[j])
          return true; //there is a special char

 return false; //no special chars
于 2013-07-24T06:25:23.523 回答
1

你最好为所有公平的特殊字符维护一个表;然后您可以验证不是其他类型的字母。我想你是 C++ 的新手;因此,您需要一个示例。请执行以下操作:

bool IsSpecialCharacter(char c)
{
  static special_chars[] = "~`!@#$%^&*()_+-=\\\/?><,.";
  char *p = &special_chars[0];
  while(*p) { 
   if(*p == c) return true;
  };
  return false;
}

我虽然这是建议的keelar。

于 2013-07-24T06:35:58.860 回答
0

按照你的逻辑,这对你来说应该很好

    bool islower= false;
    bool isNumber= false;
    bool isUpper= false;
    bool isSpecialChar=false;


        for (int count = 0; count < length; count++)
        {
            if(!islower(password[count])){

                 islower=true;
                 break;
               }
        }

    if(islower){
          for(int count = 0; count < length; count++)
              {
                if( isdigit(password[count])){
                    isNumber=true;
                    break;
                  }
              }

    }

    if(isNumber){
        for (int count = 0; count < length; count++)
        {
            if(isupper(password[count])){
               isUpper=true;
               break;
              }
        }

    } 


if(isUpper){
  static special_chars[] = "~`!@#$%^&*()_+-=\\\/?><,.";
  char *p = &special_chars[0];
  for (int count = 0; count < length; count++){
      for(int j=0;j<24;j++){
          if(p[j]==password[count]{
          isSpecialChar=true;
          break;       
         }
      }

 }

}

    if(isNumber&&isUpper&&islower&&length>=8 && isSpecialChar){

        return true;
    }else{
       return false;
    }
于 2013-07-24T06:55:32.587 回答