CppWebBrowser的使用三 获取表单内容

 


主要函数如下:


AnsiString __fastcall TMainForm::GetFormValue(TCppWebBrowser *CppWebBrowser1, AnsiString ActionStr)
{
  //赋值
  AnsiString MyStr = ActionStr;
  AnsiString SName,SId,SValue;
  AnsiString ReturnStr; //返回值

  ReturnStr = "";

  SName = MyStr.SubString(1,MyStr.Pos(",")-1);
  MyStr = MyStr.SubString(MyStr.Pos(",")+1,MyStr.Length()-MyStr.Pos(","));

  SId = MyStr.SubString(1,MyStr.Pos(",")-1);
  SValue = MyStr.SubString(MyStr.Pos(",")+1,MyStr.Length());
  if(SValue==NULL)SValue="";

    VARIANT id, index,id1,index1;
    IDispatch  *spDispatch;
    IHTMLDocument2 *pDoc2;
    IHTMLElement *pElement;
    IHTMLElementCollection  *pElementCol;
    IHTMLFormElement *pFormElement;
    IHTMLInputElement *pInputElement;//Input

    IHTMLTextAreaElement* pTextAreaElement;// TextArea

    IDispatch *WebDocument=static_cast<IDispatch*>(CppWebBrowser1->Document);
    pDoc2=static_cast<IHTMLDocument2*>(WebDocument);

    //首先获取IWebBrowser2接口
    if (SUCCEEDED(pDoc2->get_forms(&pElementCol)))  //得到form
    {
      long p=0;
      if(SUCCEEDED(pElementCol->get_length(&p)))      //哪一个form
      if(p!=0)
      {
        for(long i=0;i<=(p-1);i++)
        {
          V_VT(&id) = VT_I4;
          V_I4(&id) = i;
         V_VT(&index) = VT_I4;
          V_I4(&index) = 0;

          if(SUCCEEDED(pElementCol->item(id,index, &spDispatch)))
          {
             if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLFormElement,(void**)&pFormElement)))
             {
               long q=0;
               if(SUCCEEDED(pFormElement->get_length(&q)))     //得到form中的控件个数
               for(long j=0;j<=(q-1);j++)
               {
                  V_VT(&id) = VT_I4;
                  V_I4(&id) = j;
                  V_VT(&index) = VT_I4;
                  V_I4(&index) = 0;
                  if(SUCCEEDED(pFormElement->item(id,index, &spDispatch)))
                  {
                    if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLElement,(void**)&pElement)))
                    {
                      if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLInputElement,(void**)&pInputElement)))
                      {

                        BSTR Value;
                        BSTR Type;
                        BSTR Id;
                        BSTR Name;
                      
                        pInputElement->get_type(&Type);   //获取类型
                        pInputElement->get_value(&Value); //获取值
                        pElement->get_id(&Id);//获取Id的方法不一样
                        pInputElement->get_name(&Name); //获取它的名字

                        AnsiString tempName,tempType;
                        tempType = AnsiString(Type).UpperCase();
                        if(tempType != "RADIO")
                             tempName = AnsiString(Name).UpperCase();
                        else
                             tempName = AnsiString(Id).UpperCase();
                      
                        if(tempName!=NULL && ((tempName.Trim()).Length()>0) && tempName == SId.UpperCase())
                        {
                          tempName = AnsiString(Type).UpperCase();
                          if(tempName == "TEXT") //获取文本框的值
                          {

                            ReturnStr = AnsiString(Value);
                          }
                          else if(tempName == "PASSWORD") //获取密码框的值
                          {

                            ReturnStr = AnsiString(Value);
                          }
                          else if(tempName == "RADIO") //获取单选的值
                          {
                    
                          }
                          else if(tempName == "CHECKBOX") //获取和设置多选框的值
                          {
                          
                          }
                          else if(tempName == "BUTTON") //非提交按钮
                          {
                           
                          }
                          else if(tempName == "SUBMIT") //提交按钮
                          {
                          
                          }
                          break;
                        }//如果不符,则不做处理
                        pInputElement->Release();
                     }
                     else //不是input框
                     {


                      if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLTextAreaElement,(void**)&pTextAreaElement)))
                      {//Textarea
                        BSTR Value;
                        BSTR Type;
                        BSTR Id;
                        BSTR Name;
                      
                        //pTextAreaElement->get_type(&Type);   //获取类型
                        pTextAreaElement->get_value(&Value); //获取值
                        pElement->get_id(&Id);//获取Id的方法不一样
                        pTextAreaElement->get_name(&Name); //获取它的名字

                        AnsiString tempName,tempType;
                        tempName = AnsiString(Id).UpperCase();
                       if(tempName!=NULL && ((tempName.Trim()).Length()>0) && tempName == SId.UpperCase())
                        {

                            ReturnStr = AnsiString(Value);//获取Textarea的值
                            break;
                        }
                         pTextAreaElement->Release();
                      }//Textarea

                     }
                     pElement->Release();
                   }//if pelement
                   spDispatch->Release();
                 }
               }
              pFormElement->Release();
             }
             spDispatch->Release();
           }
        }
      }
    }
    if(pDoc2) pDoc2->Release();

    return ReturnStr;
}

 

使用示例:
点击按钮2获取表单name为msg_type 的元素的值
点击按钮3获取表单name为msg_num的元素的值

 


void __fastcall TWebForm::Button2Click(TObject *Sender)
{
AnsiString Str = "a,msg_type,";
AnsiString RetStr = MainForm->GetFormValue(WebForm->CppWebBrowser1,Str);
ShowMessage(RetStr);
}
//---------------------------------------------------------------------------
void __fastcall TWebForm::Button3Click(TObject *Sender)
{
AnsiString Str = "a,msg_num,";
AnsiString RetStr = MainForm->GetFormValue(WebForm->CppWebBrowser1,Str);
ShowMessage(RetStr);
}

 

在Spring MVC中,你可以使用@RequestParam注解来获取表单数据。同时,如果你使用Thymeleaf作为模板引擎,你可以在表单使用Thymeleaf的语法来绑定表单数据。 首先,确保你已经在你的Spring MVC配置中配置了Thymeleaf视图解析器。例如,在你的`application.properties`或`application.yml`中添加以下配置: ``` spring.thymeleaf.enabled=true spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html ``` 接下来,在你的Controller中,使用@RequestParam注解来获取表单数据。例如,假设你有一个表单提交了一个名为"name"的字段,你可以这样获取它的值: ```java @PostMapping("/submit") public String handleSubmit(@RequestParam("name") String name) { // 处理表单数据 return "redirect:/success"; } ``` 在上面的例子中,`@RequestParam("name")`表示获取名为"name"的表单字段的值,并将其赋值给`name`变量。 然后,在你的Thymeleaf模板中,你可以使用Thymeleaf的语法来绑定表单数据。例如,如果你想在表单中显示之前提交的名字,可以使用以下代码: ```html <form th:action="@{/submit}" method="post"> <input type="text" name="name" th:value="${name}" /> <button type="submit">Submit</button> </form> ``` 在上面的例子中,`${name}`表示从Controller传递过来的名为"name"的属性值。 这样,你就可以在Spring MVC中获取使用Thymeleaf表单数据了。希望对你有所帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值